Całkowanie funkcji wymiernych , pisanie kodu
Mariusz:
Ja zastanawiałem się nad napisaniem programu do całkowania funkcji wymiernych
i oto moje przemyślenia
Jednak miałbym pewne problemy z napisaniem takiego programu
Potrzebna będzie klasa/struktura wielomianów realizująca następujące operacje
dodawanie wielomianów
odejmowanie wielomianów
mnożenie wielomianów
dzielenie wielomianów z resztą
NWD wielomianów (przez branie reszt z kolejnych dzieleń)
Wartość wielomianu w punkcie (schemat Hornera)
porównywanie wielomianów
1. Sprawdzamy czy funkcję wymierną da się skrócić (licząc NWD licznika i mianownika)
2. Dzielimy z resztą licznik przez mianownik
3. Wydzielamy część wymierną całki sposobem Ostrogradskiego
Q1(x)=NWD(Q(x),Q'(x))
Q(x)=Q1(x)Q2(x)
P(x)=P1'(x)Q2(x)−P1(x)H(x)+Q1(x)P2(x) , gdzie Q2(x)Q1'(x)=Q1(x)H(x)
Mianowniki Q1(x) oraz Q2(x) można znaleźć licząć NWD wielomianów oraz wykonując dzielenie
wielomianów z resztą
Współczynniki liczników można by dostać z układu równań liniowych
Do rozwiązania tego układu równań liniowych można by użyć rozkładu LU (bo jest on w postaci
Cramera)
jednak problemem może być zapisanie tego układu równań liniowych
4. Stosujemy rozklad na sumę ulamków prostych
Jeśli chodzi o rozkład mianownika na czynniki to można by zastosować metody znajdowania
wartości własnych
Co do znajdowania wartości własnych to rozkład QR jest przydatny (tutaj aby przyśpieszyć
zbieżność warto odpowiednio dobrać przesunięcie)
Współczynniki rozkładu na sumę ułamków prostych dostajemy z układu rónań liniowych
jednak problemem może być zapisanie tego układu równań liniowych
Filip , pamiętasz że jakiś czas temu napisaliśmy strukturę do obsługi wielomianów
a także funkcje do rozwiązywania układów równań liniowych ?
Ze wstępnym skróceniem licznika i mianownika nie byłoby problemu bo mamy
funkcję NWD wielomianów oraz funkcję realizującą dzielenie wielomianów z resztą
Ze sprowadzeniem funkcji wymiernej do funkcji wymiernej właściwej
też nie powinno być problemu bo mamy funkcję realizującą dzielenie wielomianów z resztą
Jeżeli chodzi o metodę Ostrogradskiego wydzielenia części wymiernej to z mianownikami
nie będzie problemu bo mamy
funkcję NWD wielomianów oraz funkcję realizującą dzielenie wielomianów z resztą
Problemem z metodą Ostrogradskiego może być obliczenie liczników
tzn samo rozwiązanie układu równań liniowych nie będzie problemem jednak
jak ten układ równań liniowych zapisać
(może schemat Hornera który zapisaliśmy byłby pomocny)
Jeżeli powyższe sposoby nie doprowadzą do policzenia całki to tutaj na dobre wchodzą
metody numeryczne ponieważ do rozkładu na sumę ułamków prostych musimy mieć
rozkład mianownika na czynniki co wiąże się ze znalezieniem pierwiastków
Tutaj dzięki zastosowaniu metody Ostrogradskiego mamy pewność że pierwiastki
mianownika są jednokrotne co może przyśpieszyć zbieżność niektórych metod
Pierwiastki wielomianów można szukać albo metodą Newtona z deflacją
albo metodami znajdowania wartości własnych i
tutaj przydatna jest metoda QR z przesunięciami
Program do znajdowania pierwiastków wielomianu przez znalezienie wartości własnych
pewnej macierzy zwanej macierzą stowarzyszoną już napisałem
Znalezienie współczynników rozkładu funkcji wymiernej na sumę ułamków prostych
pewnie wiązałoby się z rozwiązaniem pewnego układu równań liniowych
tylko jak go dostać
(może schemat Hornera który zapisaliśmy byłby pomocny)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Co do zapisania tej naszej strukturki jako klasy w C++
to większość funkcji da się zapisać jako operatory dzięki czemu
klasa będzie wygodniejsza w użyciu
Jakie masz u siebie konstruktory ?
Co sądzisz o pomyśle parsowania wielomianu z łańcucha
a także zapisaniu wielomianu do łańcucha ?
20 sty 21:16
Mariusz:
Filipku czemu nie odpowiadasz , razem łatwiej byłoby myśleć
Co do liczników z metody Ostrogradskiego to pomyślałem aby wylosować
n różnych liczb (gdzie n jest stopniem mianownika Q(x)) i zapisać je w pomocniczej tablicy
P(x)=P1'(x)Q2(x)−P1(x)H(x)+Q1(x)P2(x) , gdzie Q2(x)Q1'(x)=Q1(x)H(x)
Rozbić P1'(x) , P1(x), P2(x) na jednomiany , pogrupować wielomiany po prawej
i wywołać schemat Hornera dla każdej wylosowanej liczby
Przydałoby się też pokazać że rzeczywiście wielomian Q1(x) dzieli bez reszty wielomian
Q2(x)Q1'(x)
Dla obliczenia współczynników rozkładu na sumę ułamków prostych można by chyba podobnie
postąpić
Jak już wcześniej napisałem do znalezienia czynników mianownika trzeba by jakąś
procedurę numeryczną wybrać − ja wybrałem tę związaną z liczeniem wartości własnych
pewnej macierzy
Trzeba by też powiązać te współczynniki z konkretnymi czynnikami rozkładu mianownika Q2(x)
Gdyby się udało napisać działający program to później można by się zastanowić jak
zaimplementować jakieś podstawowe podstawienia
a może nawet jakieś całkowania przez części
Zostaje też jeszcze sposób wyświetlania danych oraz wyniku w trybie tekstowym
21 sty 03:56
daras: myślałem, że już od dawna są takie programy
21 sty 16:47