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?
ode
python
explicit-methods
joshlk
quelle
quelle
f(x,y)
Daten einfach " einpacken ", damit die Ergebnisse gespeichert werden.Antworten:
Wenn Sie von
yp_1 = f(x_1, y_1)
zuyp_2 = f(x_1+h, y_2)
gehen, benötigen Sie die Zwischenpunkte:Im Allgemeinen ist keiner der Zwischenpunkte im nächsten Schritt nützlich. Weil
K1
<>K2
undK3
<>yp_2
.quelle
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.
quelle
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.
quelle
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.
quelle