Metodi numerici
per equazioni differenziali ordinarie - laboratorio
Docente:
Beatrice Meini
Lezione 9: Il metodo alle differenze finite per un problema non lineare; equazioni differenziali algebriche risolte con ode15s
- Vogliamo risolvere il BVP x''(t)+4/t*x'(t)+(t*x(t)-1)*x(t)=0, con
condizioni x'(0)=0, x(L)=0, dove L e' grande (Example 7.4 del libro
Ascher-Petzold). Il problema ha una soluzione molto "smooth", che
decresce esponenzialmente per t grande. Abbiamo osservato che il
metodo di shooting non funziona per questo esempio.
Risolviamo il problema con il metodo alle differenze finite basato sul
punto di mezzo. Riscriviamo l'equazione differenziale come una
equazione del primo ordine di dimensione 2, cioe' del tipo
y'(t)=f(t,y(t)), dove y(t) ha dimensione 2. Questa equazione non e'
lineare, dunque applicando il metodo alle differenze finite otteniamo un
sistema di equazioni nonlineari. Risolviamo questo sistema mediante il metodo di Newton.
La
function [t,x]=df_es2(L,N,x0,itmax,tol)
risolve il problema in questo modo, dove N e' il numero di discretizzazioni dell'intervallo, x0 e' una approssimazione iniziale della soluzione, itmax e tol sono il numero massimo di iterazioni e la tolleranza per la condizione di arresto del metodo di Newton.
Si osservi la convergenza quadratica del metodo di Newton. Provare a
modificare N. Come cambia l'approssimazione?
-
La function ode15s di Matlab permette di risolvere equazioni differenziali algebriche della forma M(t,x)*x' = f(t,x), dove M(t,x) e' una funzione assegnata, chiamata "mass function", che viene passata tramite le opzioni.
Ad esempio, per risolvere l'equazione E x'+A x = v, dove E = [1 1; 1 1], A= [-1 -1; 2 0], v=[1; 2], con condizioni iniziali x(0)=[1; 1], nell'intervallo [0 2], si possono dare i comandi:
E = [1 1; 1 1];
options = odeset('Mass',E);
[t x] = ode15s(@flin, [0 2], [1; 1], options);
dove flin e' la function che definisce la funzione f(t,x)=-Ax+v.
Il file DAE.tar contiene un tutorial dove si spiega come si risolvono equazioni differenziali algebriche, il funzionamento della function ode15s e si fanno alcuni esempi. Gli esempi sono implementati nelle function ex**.m che si trovano nella directory DAE_paper/DAE_examples_70/.
Si guardino e si provino questi esempi. In particolare l'esempio 4 (ex4.m) trasforma una ODE stiff in una DAE, sostituendo una equazione differenziale con una equazione algebrica.