Suche…


Beispiel für odeset

Zunächst initialisieren wir unser Anfangswertproblem, das wir lösen möchten.

odefun = @(t,y) cos(y).^2*sin(t);
tspan = [0 16*pi];
y0=1;

Wir verwenden dann die ode45-Funktion ohne bestimmte Optionen, um dieses Problem zu lösen. Um es später vergleichen zu können, zeichnen wir die Flugbahn auf.

[t,y] = ode45(odefun, tspan, y0);
plot(t,y,'-o');

Wir setzen jetzt eine enge relative und eine enge absolute Toleranzgrenze für unser Problem.

options = odeset('RelTol',1e-2,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Wir setzen enge relative und enge absolute Toleranzgrenzen.

options = odeset('RelTol',1e-7,'AbsTol',1e-2);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Wir setzen enge relative und enge absolute Toleranzgrenzen. Wie in den vorangegangenen Beispielen mit engen Toleranzgrenzen unterscheidet sich die Flugbahn vollständig von der ersten Darstellung ohne bestimmte Optionen.

options = odeset('RelTol',1e-2,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Wir setzen enge relative und enge absolute Toleranzgrenzen. Der Vergleich des Ergebnisses mit dem anderen Diagramm unterstreicht die Fehler, die bei der Berechnung mit engen Toleranzgrenzen gemacht wurden.

options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
plot(t,y,'-o');

Im Folgenden sollte der Kompromiss zwischen Präzision und Laufzeit dargestellt werden.

tic;
options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,y] = ode45(odefun, tspan, y0, options);
time1 = toc;
plot(t,y,'-o');

Zum Vergleich schärfen wir die Toleranzgrenze für den absoluten und den relativen Fehler. Wir können jetzt sehen, dass es ohne großen Genauigkeitsgewinn wesentlich länger dauert, um unser Anfangswertproblem zu lösen.

tic;
options = odeset('RelTol',1e-13,'AbsTol',1e-13);
[t,y] = ode45(odefun, tspan, y0, options);
time2 = toc;
plot(t,y,'-o');


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow