Metodi numerici
per equazioni differenziali ordinarie - laboratorio
Docente:
Beatrice Meini
Lezione 1: Il metodo di Eulero
La function [t,x]=euler_forw(odefun,tspan,x0,h,varargin) applica il metodo di Eulero esplicito per risolvere un IVP. La variabile odefun rappresenta la funzione f(t,x) che definisce l'equazione differenziale, tspan un vettore di dimensione 2 che rappresenta l'intervallo d'integrazione, x0 e' il valore iniziale, h e' il passo di discretizzazione, varargin (opzionale) contiene eventuali parametri che intervengono nella definizione di f(t,x). In uscita, t contiene l'intervallo discretizzato, e x le approssimazioni della soluzione.
La function [y] = f1(t,x) e' la funzione che definisce l'equazione differenziale x'(t)= -x(t)+2cos(t). La soluzione dell'IVP con condizione iniziale x(0)=1, nell'intervallo [0 T], e' la funzione definita dalla function [y] = sol1(t). Approssimare la soluzione con il metodo di Eulero e calcolare l'errore, ad esempio con i comandi
[t,x]=euler_forw(@f1,[0 5],1,1.e-2);
y=sol1(t);
err=abs(x-y);max(err)
La convergenza lineare del metodo di Eulero si osserva dando i seguenti comandi:
clear err;
for i=1:20, [t,x]=euler_forw(@f1,[0 5],1,1.e-2/i); y=sol1(t); err(i)=max(abs(x-y));end
plot(1./err)
La function [y] = test(t,x,lambda) e' la funzione che definisce il problema test x'(t)= lambda x(t). La soluzione dell'IVP con condizione iniziale x(0)=1, nell'intervallo [0 T], e' la funzione x(t)=exp(lambda*t). Se fissiamo lambda=-10, l'IVP e' asinoticamente stabile. Per poter stare nella regione di stabilita' assoluta del metodo di Eulero occorre scegliere h<0.2.
Approssimare la soluzione con diversi valori di h, e tracciare il grafico della soluzione approssimata e di quella esatta. Ad esempio:
h=0.2; [t,x]=euler_forw(@test,[0 5],1, h,-10);plot(t,x,t,exp(-10*t))
h=0.21; [t,x]=euler_forw(@test,[0 5],1, h,-10);plot(t,x,t,exp(-10*t))
h=0.19; [t,x]=euler_forw(@test,[0 5],1, h,-10);plot(t,x,t,exp(-10*t))
Provare con altri valori di lambda.
Costruire una function che risolve il problema test mediante il metodo di Eulero implicito. Calcolare la soluzione prendendo lambda=-10 e gli stessi valori di h del punto precedente. Cosa si osserva?
La function [y] = f2(t,x,lambda) e' la funzione che definisce l'equazione differenziale x'(t)=lambda*(x-exp(-t)), dipendente dal parametro lambda. La soluzione dell'IVP con condizione iniziale x(0)=x0, nell'intervallo [0 T], e' la funzione definita dalla function [y] = sol2(t, lambda, x0). Approssimare la soluzione con il metodo di Eulero e tracciare il grafico della soluzione approssimata ed esatta, ad esempio con i comandi:
lambda=-10;
[t,x]=euler_forw(@f2,[0 10],1,0.15,-10);plot(t,x,t,sol2(t,-10,1))
[t,x]=euler_forw(@f2,[0 10],1,0.2,-10);plot(t,x,t,sol2(t,-10,1))
Risolvere lo stesso problema con il metodo di Eulero implicito.