12.07.2015 Views

Equazioni differenziali in Matlab

Equazioni differenziali in Matlab

Equazioni differenziali in Matlab

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Equazioni</strong> <strong>differenziali</strong> <strong>in</strong><strong>Matlab</strong><strong>Matlab</strong> dispone di diverse functions per risolvere sistemi diequazioni <strong>differenziali</strong>: Metodi espliciti: ode23 (basato su schemi Runge-Kutta di ord<strong>in</strong>e 2 e 3); ode45 (basato su schemiRunge-Kutta di ord<strong>in</strong>e 4 e 5); ode113 (basato suschemi multistep di ord<strong>in</strong>e variabile da 1 a 13) Metodi impliciti: ode15s (schemi multistep diord<strong>in</strong>e variabile da 1 a 5)


S<strong>in</strong>tassiTutte le functions per ODE di <strong>Matlab</strong> sono basate sulla stessas<strong>in</strong>tassi. I primi esempi saranno per la function ode45, che è la piùusata, ma possono essere applicati a tutte le altre ODE functions.La chiamata più semplice è:[t,y] = ode45(fun, tspan, y0)Qui:- fun è una str<strong>in</strong>ga di caratteri che contiene il nome della funzionef(t,y) che def<strong>in</strong>isce il sistema differenziale.- tspan è un vettore che contiene l’istante <strong>in</strong>iziale e l’istante f<strong>in</strong>ale:tspan=[t0, tf].- y0 contiene le condizioni <strong>in</strong>iziali: è uno scalare se c’e’ un’ unicaequazione differenziale; è un vettore con m componenti sedobbiamo <strong>in</strong>tegrare un sistema con m equazioni.


Esempio 1Considero ancora l’equazione differenzialey’ = -y -5*exp(-t) *s<strong>in</strong>(5t),con condizione <strong>in</strong>iziale y(0)=1.La soluzione esatta è y(t) = exp(-t) *cos(5t).Uso la function funz.m che contiene il calcolo di:f(t,y) = -y -5*exp(-t) *s<strong>in</strong>(5t)Per <strong>in</strong>tegrare l’equazione differenziale da t0=0 a tf=5, concondizione <strong>in</strong>iziale y0=1, devo dare il comando:>> [t,y]=ode45('funz',[0,5],1);Notare che non devo <strong>in</strong>serire il numero di passi, perché lefunctions di <strong>Matlab</strong> sono adattative


Esempio 2Per <strong>in</strong>tegrare il sistema differenziale con le equazioni del pendolo,devo dare il comando:>> [t,y]=ode45('pend_l<strong>in</strong>',[0,5],[0,1]);In questo caso, le equazioni del pendolo vengono <strong>in</strong>tegrate da t0=0 atf=5, con condizioni <strong>in</strong>iziali y0(0) = [0,1], cioè con posizione <strong>in</strong>izialeuguale a zero, e velocità <strong>in</strong>iziale uguale a 1


Impostare le tolleranzeLe functions di <strong>Matlab</strong> per ODE sono adattative, come la functionquad per l’<strong>in</strong>tegrazione numerica.Il passo di <strong>in</strong>tegrazione viene calcolato dalla function stessa, <strong>in</strong>modo da assicurare che l’errore locale sia dell’ord<strong>in</strong>e di unatolleranza prefissata.Anche per le functions per ODE, ci sono dei valori di default per latolleranza. E’ però possibile anche impostare <strong>in</strong> <strong>in</strong>put la tolleranzadesiderata.La functions per ODE usano due tolleranze, RelTol e AbsTol.L’errore stimato ad ogni passo per la componente i della soluzioney soddisfa la stima:e(i)


I valori di default sono:RelTol = 1e-3AbsTol = 1e-6Per cambiare i valori di default, devo dare due comandi:Supponiamo di voler impostare RelTol = 1e-4 e AbsTol = 1e-7:>> options=odeset('AbsTol',1e-7,'RelTol',1e-4);>> [t,y]=ode45('pend_l<strong>in</strong>',[0,5],[0,1],options);Il primo comando <strong>in</strong>troduce i nuovi valori nella strutturaoptions.Il secondo comando chiama la functionode45 con i valori fissati <strong>in</strong>optionsCi aspettiamo che modificando le tolleranze <strong>in</strong> questo modo,aumenterà il numero di passi usato dalla functionode45. Perverificarlo stampiamo il numero di passi:


Diamo qu<strong>in</strong>di i comandi:>> [t,y]=ode45('pend_l<strong>in</strong>',[0,5],[0,1]);>> length(t)ans =521>> options=odeset('AbsTol',1e-7,'RelTol',1e-4);>> [t,y]=ode45('pend_l<strong>in</strong>',[0,5],[0,1],options);>> length(t)ans =865Qu<strong>in</strong>di il numero di passi è aumentato da 521 a 865.


Problemi stiff Un’equazione (o un sistema di equazioni) si dice stiff,quando uno schema esplicito è costretto ad usare un passodi <strong>in</strong>tegrazione molto piccolo, altrimenti la soluzionediventa <strong>in</strong>stabile. I problemi stiff si <strong>in</strong>contrano quando si vuole simulare unfenomeno caratterizzato da un transitorio molto veloce,dopo il quale il sistema si stabilizza su una soluzione chevaria più lentamente nel tempo. Esempi tipici di problemistiff si hanno nella simulazione dei circuiti elettrici e neifenomeni con reazioni chimiche Le functions implicite, come la ode15s, permettono ditrattare <strong>in</strong> modo efficiente anche problemi stiff.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!