Próbuję zaimplementować metodę Runge-Kutta czwartego rzędu do rozwiązywania ODE pierwszego rzędu w Pythonie, tj. . Rozumiem, jak działa ta metoda, ale próbuję napisać skuteczny algorytm, który minimalizuje liczbę obliczeń f (x, y), ponieważ jest to dość kosztowne. Powiedziano mi, że możliwe jest ponowne wykorzystanie punktów danych, które zostały wcześniej obliczone, gdy zwiększasz liczbę kroków, ale nie wiesz, jak to zrobić. Czy ktoś wie, jak to zrobić, czy jest to niemożliwe?f ( x , y )
ode
python
explicit-methods
joshlk
źródło
źródło
f(x,y)
aby wyniki zostały zapamiętane.Odpowiedzi:
Jeśli zamierzasz od
yp_1 = f(x_1, y_1)
celuyp_2 = f(x_1+h, y_2)
będziesz potrzebować punktów pośrednich:Zasadniczo żaden z punktów pośrednich nie jest użyteczny w następnym kroku. Ponieważ
K1
<>K2
iK3
<>yp_2
.źródło
Ogólnie rzecz biorąc, jawne metody Runge-Kutty rzędu wymagają co najmniej oceny funkcji i absolutnie nie ma sposobu, aby tego uniknąć. W przeszłości wymagają więcej niż oceny funkcji.N N = 4 N.N. N. N.= 4 N.
Jeśli chcesz ponownie wykorzystać wcześniejsze oceny funkcji, musisz użyć metody wieloetapowej, takiej jak Adams-Bashforth.
W każdym razie płacisz za każdą strategię. Metody jednoetapowe wymagają największej liczby ocen funkcji, ale metody wieloetapowe mają największe wymagania dotyczące pamięci.
Edycja: Korekta. Moje stwierdzenie jest prawdziwe tylko w przypadku jawnych metod. W przypadku metod niejawnych sytuacja jest mniej jasna, ponieważ liczba etapów nie przekłada się bezpośrednio na liczbę ocen funkcji.
źródło
Wiem, że używasz metod Runge-Kutta do rozwiązania ODE, ale jeśli chcesz ponownie użyć starych obliczonych wartości swojego f (x, y), możesz rozważyć metody wieloetapowe, takie jak Adams-Bashforth lub Adams-Moulton metody Oczywiście wadą tych metod jest to, że nie można bardzo łatwo zastosować adaptacyjnego skracania czasu.
źródło
Sprawdź metody „osadzone”: celem tego typu metod RK jest posiadanie dwóch metod o różnych rzędach, przy czym metoda wysokiego rzędu wykorzystuje te same oceny funkcji co metoda niskiego rzędu. Pozwala to na bardzo wydajne oszacowanie błędu. Patrz str. 165 i dalsze w „Rozwiązywanie równań różniczkowych zwyczajnych I: problemy niesztywne” autorstwa Hairera, Norsetta i Wannera. Typowymi przykładami są metody Fehlberga rzędu 7 (8).
Ponadto, jeśli szukasz rozwiązania ODE w PYTHON, sprawdź assimulo . Bawię się tym pakietem od kilku tygodni i jestem całkiem szczęśliwy.
źródło