INDIETRO
 Laboratorio 9
AVANTI

precisione delle soluzioni delle ODE

Quanto sono buone le soluzioni trovate numericamente ?

Possiamo rispondere facendo una analisi numerica dei vari algoritmi, ovviamente.
Qui ricordiamo solamente che un problema ben condizionato in avanti generalmente è mal condizionato all'indietro, e viceversa. Inoltre gli errori tendono ad accumularsi nel tempo, per cui anche con un problema ben condizionato occorre stare attenti alla stabilità numerica dell'algoritmo, per esempio scegliendo opportunamente il passo.

Ma quando ci si trova, come nel nostro caso, ad usare delle routines scritte da altri e di cui non conosciamo le proprietà numeriche esatte, possiamo comunque fare qualche prova per capire meglio il loro comportamento con il problema che ci interessa.



Ripetiamo i calcoli partendo da 1, 1,001 e 0.999:

f=@(x,t) (3-x).*x + sin(t)
t1=linspace(0,10,500);
x1=lsode(f,1,t1);
x2=lsode(f,1.1,t1);
x3=lsode(f,0.9,t1);
plot(t1,x1-x2,t1,x1-x3);
plot(t1,log(abs(x1-x2)),t1,log(abs(x1-x3)));

esercizio:
plottare le soluzioni per valori iniziali tra 1 e 2 a passi di 0.1 tutte su uno stesso grafico

Qui proviamo a tracciare la "andata" e "ritorno" delle risoluzioni delle equazioni già viste.

f=@(x,t) (3-x).*x + sin(t)
tr=linspace(0,10,500);
xr=lsode(f,1,tr);
tl=linspace(10,0,500);
xl=lsode(f,xr(end),tl);
plot(tl,xl,tr,xr);

Il risultato non sembra molto buono... Provare ad aumentare il numero di passi o la precisione dell'algoritmo !
Cosa sta succedendo ??

Proviamo ora l'altro algoritmo:

f=@(t,x) (3-x).*x + sin(t)
[tr,xr]=ode45(f,[0,5],1);
[tl,xl]=ode45(f,[5,0],xr(end));
plot(tl,xl,tr,xr);


Con l'intervallo [0.5] si vede già una certa differenza; cosa succede se si prende l'intervallo [0,10] ??

esercizio:
trovare, se possibile, un sistema per risolvere il problema di Cauchy x'=(3-x)*x-sin(t) con condizione iniziale x(0)=1 nell'intervallo [-10,0].  
INDIETRO
Laboratorio Didattico di Matematica Computazionale - Sergio Steffè - AA 2017/2018 - PISA
AVANTI