Absoluter Fehler von ODE45- und Runge-Kutta-Methoden im Vergleich zur analytischen Lösung

8

Ich würde mich freuen, wenn jemand mit folgendem Problem helfen kann. Ich habe die folgende ODE:

%Vor%

Ich habe (1) auf zwei verschiedene Arten gelöst. Mit Hilfe der Runge-Kutta Methode (4. Ordnung) und mittels ode45 in Matlab. Ich habe beide Ergebnisse mit der analytischen Lösung verglichen, die gegeben ist durch:

%Vor%

Wenn ich den absoluten Fehler jeder Methode in Bezug auf die genaue Lösung plotte, bekomme ich Folgendes:

Für die RK-Methode lautet mein Code:

%Vor%

Und für ode45 :

%Vor%

Meine Frage ist, warum habe ich Oszillationen, wenn ich ode45 verwende? (Ich beziehe mich auf den absoluten Fehler). Beide Lösungen sind genau ( 1e-9 ), aber was passiert mit ode45 in diesem Fall?

Wenn ich den absoluten Fehler für die RK-Methode berechne, warum sieht es dann besser aus?

    
Sergio Haram 18.02.2014, 16:35
quelle

2 Antworten

21

Ihre RK4-Funktion nimmt feste Schritte vor, die viel kleiner sind als diejenigen, die ode45 benötigt. Was Sie wirklich sehen, ist der Fehler aufgrund der polynomialen Interpolation , die verwendet wird, um die Punkte zwischen den wahren Schritten zu erzeugen ode45 dauert. Dies wird oft als "dichte Ausgabe" bezeichnet (siehe Hairer & amp; Ostermann 1990 ).

Wenn Sie einen Vektor TSPAN mit mehr als zwei Elementen angeben, Matlab's ODE-Suite-Solver produzieren feste Schrittgröße. Das bedeutet nicht, dass sie tatsächlich eine feste Schrittgröße verwenden oder dass sie die in TSPAN angegebenen Schrittweiten verwenden. Sie können die tatsächlich verwendeten Schrittgrößen sehen und trotzdem die gewünschte feste Schrittgröße erhalten, indem Sie ode45 eine Struktur ausgeben lassen und deval :

%Vor%

Sie werden sehen, dass nach einem anfänglichen Schritt von 0.02 , weil Ihre ODE einfach ist, konvergiert sie für die nachfolgenden Schritte zu 0.1 . Die Standardtoleranzen in Kombination mit der standardmäßigen maximalen Schrittgrößenbeschränkung (ein Zehntel des Integrationsintervalls) bestimmen dies. Lassen Sie uns den Fehler in den wahren Schritten darstellen:

%Vor%

Wie Sie sehen, wächst der Fehler bei den echten Schritten langsamer als der Fehler bei RK4 ( ode45 ist effektiv eine Methode höherer Ordnung als RK4, also würden Sie dies erwarten). Der Fehler wächst aufgrund der Interpolation zwischen den Integrationspunkten. Wenn Sie dies einschränken möchten, sollten Sie die Toleranzen oder andere Optionen über odeset anpassen .

Wenn Sie ode45 zwingen wollten, einen Schritt von 1/50 zu verwenden, können Sie dies tun (funktioniert, weil Ihre ODE einfach ist):

%Vor%

Versuchen Sie für ein anderes Experiment, das Integrationsintervall zu vergrößern, um es nach t = 10 may zu integrieren. Sie werden viel interessantes Verhalten in dem Fehler sehen (die Darstellung des relativen Fehlers ist hier nützlich). Kannst du das erklären? Können Sie mit ode45 und odeset Ergebnisse erzielen, die sich gut verhalten? Die Integration exponentieller Funktionen über große Intervalle mit adaptiven Schrittmethoden ist eine Herausforderung, und ode45 ist nicht unbedingt das beste Werkzeug für den Job. Es gibt jedoch Alternativen , aber sie erfordern möglicherweise etwas Programmierung.

    
horchler 18.02.2014, 18:04
quelle
0

ode45 ist gekoppelt mit rk4-rk5. Persönlich denke ich, dass der ODE45-Fehler schöner ist. Beachten Sie, dass es begrenzt bleibt. Die ode4 wird korrigiert, wenn die Fehlergröße zu groß wird und der minimale Fehler pro Zyklus etwa 1e-10 ist. Der rk4 "rennt weg" und nichts hält ihn auf.

    
EngrStudent 18.02.2014 16:51
quelle