matematykaszkolna.pl
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