Runge-Kutta und Wiederverwendung von Datenpunkten

11

Ich versuche, die Runge-Kutta-Methode vierter Ordnung zum Lösen einer ODE erster Ordnung in Python zu implementieren, dh . Ich verstehe, wie die Methode funktioniert, versuche aber, einen effizienten Algorithmus zu schreiben, der die Häufigkeit derBerechnungvonf(x,y)minimiert,da dies ziemlich kostspielig ist. Mir wurde gesagt, dass es möglich ist, Datenpunkte wiederzuverwenden, die zuvor berechnet wurden, während Sie über die Schritte inkrementieren, aber nicht sehen können, wie. Weiß jemand wie das geht oder ist das nicht möglich?dydx=f(x,y)f(x,y)

joshlk
quelle
Forschung "Auswendiglernen". Sie können Ihre f(x,y)Daten einfach " einpacken ", damit die Ergebnisse gespeichert werden.
2
@ S.Lott: Der Begriff ist "Memoization", ohne das "r".
1
@DietrichEpp: Völlig korrekt. Mac OS X verfügt über eine neue, aggressive Rechtschreibprüfung ohne technische Kenntnisse.
Ist dies ein System 2. Ordnung, das mit einer Methode 4. Ordnung simuliert wurde?
Hier ist eine riesige Liste alternativer Lösungen: google.com/… Jede dieser Lösungen wird wahrscheinlich hilfreich sein.

Antworten:

8

Wenn Sie von yp_1 = f(x_1, y_1)zu yp_2 = f(x_1+h, y_2)gehen, benötigen Sie die Zwischenpunkte:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

Im Allgemeinen ist keiner der Zwischenpunkte im nächsten Schritt nützlich. Weil K1<> K2und K3<> yp_2.

ja72
quelle
4

N NN=4N

Wenn Sie frühere Funktionsauswertungen wiederverwenden möchten, müssen Sie eine mehrstufige Methode wie Adams-Bashforth verwenden.

In jedem Fall zahlen Sie für jede Strategie. Einzelschrittverfahren erfordern die größte Anzahl von Funktionsauswertungen, Mehrschrittverfahren haben jedoch den größten Speicherbedarf.

Bearbeiten: Korrektur. Meine Aussage gilt nur für explizite Methoden. Bei impliziten Methoden ist die Situation weniger klar, da die Anzahl der Stufen nicht direkt in die Anzahl der Funktionsbewertungen übersetzt wird.

Reid.Atcheson
quelle
Ich sollte wahrscheinlich etwas genauer sein. Siehe Butcher für weitere Details: Butcher, JC und J. Wiley. Numerische Methoden für gewöhnliche Differentialgleichungen. Wiley Online Library, 2008. Hervorragende Referenz für ODE-Lösungen und bietet auch viele nicht vorhandene Beweise für RK-Methoden (z. B. gibt es keine Runge-Kutta-Methode der Ordnung 5, die nur 4 Funktionsbewertungen verwendet.)
Reid.Atcheson
1
Der Vollständigkeit halber: Ihre Behauptungen gelten nicht für "allgemeine Runge-Kutta-Methoden", sondern nur für explizite Runge-Kutta-Methoden.
David Ketcheson
Hoppla! Du hast recht, tut mir leid.
Reid.Atcheson
1

Ich weiß, dass Sie Runge-Kutta-Methoden verwenden, um Ihre ODE zu lösen, aber wenn Sie alte berechnete Werte Ihres f (x, y) wiederverwenden möchten, sollten Sie mehrstufige Methoden wie Adams-Bashforth oder Adams-Moulton in Betracht ziehen Methoden. Der Nachteil dieser Methoden ist natürlich, dass Sie adaptive Zeitschritte nicht sehr einfach verwenden können.

Paul
quelle
0

Bitte überprüfen Sie die "eingebetteten" Methoden: Das Ziel dieser Art von RK-Methoden besteht darin, zwei Methoden mit unterschiedlichen Ordnungen zu haben, wobei die Methode hoher Ordnung dieselben Funktionsbewertungen wie die Methode niedriger Ordnung verwendet. Dies ermöglicht eine sehr effiziente Fehlerschätzung. Siehe S.165 und weiter von "Lösen gewöhnlicher Differentialgleichungen I: Nichtsteife Probleme" von Hairer, Norsett und Wanner. Typische Beispiele sind Fehlberg-Methoden der Ordnung 7 (8).

Wenn Sie ODEs in PYTHON lösen möchten, schauen Sie sich assimulo an . Ich spiele seit ein paar Wochen mit diesem Paket und bin ziemlich glücklich.

GertVdE
quelle