Ricerca…


Esempio per odeset

Innanzitutto inizializziamo il problema del valore iniziale che vogliamo risolvere.

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

Quindi usiamo la funzione ode45 senza alcuna opzione specificata per risolvere questo problema. Per confrontarlo in seguito, tracciamo la traiettoria.

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

Ora stabiliamo un limite stretto e un limite assoluto di tolleranza per il nostro problema.

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

Stabiliamo un limite assoluto di tolleranza stretto relativo e stretto.

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

Stabiliamo un limite di tolleranza stretto relativo e stretto assoluto. Come negli esempi precedenti con limiti ristretti di tolleranza, la traiettoria è completamente diversa dalla prima trama senza opzioni specifiche.

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

Stabiliamo un limite di tolleranza stretto relativo e stretto assoluto. Confrontando il risultato con l'altro grafico si evidenzieranno gli errori effettuati calcolando con limiti di tolleranza stretti.

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

Quanto segue dovrebbe dimostrare il compromesso tra precisione e tempo di esecuzione.

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

Per confronto si stringe il limite di tolleranza per l'errore assoluto e relativo. Ora possiamo vedere che senza un grande guadagno di precisione ci vorrà molto più tempo per risolvere il nostro problema del valore iniziale.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow