Sök…


Exempel för odeset

Först initialiserar vi vårt initiala värdeproblem som vi vill lösa.

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

Vi använder sedan ode45-funktionen utan några specificerade alternativ för att lösa detta problem. För att jämföra det senare planerar vi banan.

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

Vi sätter nu en smal släkting och en smal absolut toleransgräns för vårt problem.

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

Vi sätter en snäv relativ och smal absolut toleransgräns.

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

Vi sätter en smal relativ och snäv absolut toleransgräns. Som i de tidigare exemplen med smala toleransgränser ser man banan vara helt annorlunda än den första handlingen utan några specifika alternativ.

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

Vi sätter en tät relativ och snäv absolut toleransgräns. Att jämföra resultatet med det andra plottet kommer att understryka de fel som gjorts vid beräkningen med smala toleransgränser.

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

Följande ska visa avvägningen mellan precision och körtid.

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

Som jämförelse skärper vi toleransgränsen för absolut och relativt fel. Vi kan nu se att utan stor vinst i precision kommer det att ta betydligt längre tid att lösa vårt initiala värdeproblem.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow