Runge-Kutta und Wiederverwendung von Datenpunkten

  • Ich versuche, die Runge-Kutta-Methode vierter Ordnung zum Lösen einer ODE erster Ordnung in Python zu implementieren, d. h. $ \ frac {dy} {dx} = f (x, y) $. Ich verstehe, wie die Methode funktioniert, aber ich versuche, einen effizienten Algorithmus zu schreiben, der die Anzahl der Berechnungen von $ f (x, y) $ auf ein Minimum reduziert, da dies ziemlich kostspielig ist. Mir wurde gesagt, dass es möglich ist, Datenpunkte wiederzuverwenden, die zuvor berechnet wurden, während Sie die Schritte inkrementieren, aber nicht sehen, wie. Weiß jemand, wie das geht, oder ist das nicht möglich?

    23 February 2012
    MattH
3 answers
  • Wenn Sie von yp_1 = f(x_1, y_1) zu yp_2 = f(x_1+h, y_2) wechseln, benötigen Sie 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 für den nächsten Schritt nützlich. Weil K1 & lt; K2 und K3 & lt; yp_2.

    23 January 2012
    ninesided
  • Ich weiß, dass Sie Runge-Kutta-Methoden verwenden, um Ihre ODE zu lösen. Wenn Sie jedoch alte berechnete Werte Ihres f (x, y) wiederverwenden möchten, sollten Sie mehrstufige Methoden wie den Adams verwenden -Bashforth oder Adams-Moulton-Methoden. Der Nachteil dieser Methoden ist natürlich, dass Sie das adaptive Zeitschrittverfahren nicht sehr einfach verwenden können.

    04 March 2012
    Josh Kodroff
  • Bitte überprüfen Sie "eingebettete" Methoden: Bei dieser Art von RK-Methoden werden zwei Methoden mit unterschiedlicher Reihenfolge verwendet, bei denen die Methode höherer Ordnung die gleiche Funktionsbewertung wie die Methode niedriger Ordnung verwendet. Dies ermöglicht eine sehr effiziente Fehlerschätzung. Siehe S.165 und weiter unter "Lösen gewöhnlicher Differentialgleichungen I: Nicht schwierige Probleme" von Hairer, Norsett und Wanner. Typische Beispiele sind die Fehlberg-Methoden der Reihenfolge 7 (8).

    Wenn Sie sich mit der Lösung von ODEs in PYTHON befassen, überprüfen Sie assimulo . Ich habe mit diesem Paket seit ein paar Wochen gespielt und bin ziemlich glücklich.

    24 February 2012
    Stu