Zoeken…


Voorbeeld voor odeset

Eerst initialiseren we ons initiële waardeprobleem dat we willen oplossen.

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

We gebruiken vervolgens de functie ode45 zonder specifieke opties om dit probleem op te lossen. Om het later te vergelijken, plotten we het traject.

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

We stellen nu een nauwe relatieve en een nauwe absolute tolerantielimiet voor ons probleem.

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

We stellen een strakke relatieve en nauwe absolute tolerantielimiet.

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

We stellen een nauwe relatieve en strakke absolute tolerantielimiet vast. Zoals in de vorige voorbeelden met smalle tolerantiegrenzen ziet men dat het traject compleet verschilt van het eerste plot zonder specifieke opties.

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

We stellen strakke relatieve en strakke absolute tolerantielimieten vast. Het vergelijken van het resultaat met de andere plot zal de fouten onderstrepen die zijn gemaakt met het berekenen met nauwe tolerantiegrenzen.

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

Het volgende zou de wisselwerking tussen precisie en runtime moeten aantonen.

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

Ter vergelijking hebben we de tolerantielimiet voor absolute en relatieve fouten aangescherpt. We kunnen nu zien dat zonder grote winst in precisie het aanzienlijk langer zal duren om ons initiële waardeprobleem op te lossen.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow