Sei sulla pagina 1di 7

Soluzione del laboratorio 18 - Parte seconda

Sistemi di equazioni differenziali ordinarie


© 2009 Questo testo (compresi i quesiti ed il loro svolgimento) è coperto da diritto d’autore. Non può essere sfruttato a fini commerciali o
di pubblicazione editoriale. Non possono essere ricavati lavori derivati. Ogni abuso sarà punito a termine di legge dal titolare del diritto.
This text is licensed to the public under the Creative Commons Attribution-NonCommercial-NoDerivs2.5 License
(http://creativecommons.org/licenses/by-nc-nd/2.5/).

Esercizio 0
Si consideri il problema di Cauchy utilizzato nella scorsa esercitazione:

 0 y(t)
y (t) = f (t, y) = − y(t)2 t ∈ (0, 100]
(1 + t) (1)
y(0) = 1

2(1 + t)
la cui soluzione esatta è y(t) =
(t.2 + 2t + 2)
ˆ Si utilizzino le funzioni built-in di Matlabr ode23.m e ode45.m per la soluzione
approssimata del problema di Cauchy in oggetto con la seguente sintassi:

[t h,u h] = ode23(f,[tmin tmax],y0)

dove f è definita come anonimous function. Si visualizzino i grafici delle soluzioni cosı̀
ricavate. Cosa si nota rispetto alla discretizzazione spaziale?

% Funzione
f = @( t , y ) y . /(1+ t ) −y . ˆ 2 ;
% Dato i n i z i a l e
y0 = 1 ;
% Tempi
tmin = 0 ;
tmax = 1 0 0 ;
% Soluzione esatta
y e s = @( t ) 2 * (1+ t ) . / ( t . ˆ2 + 2 * t + 2 ) ;
t d i s = l i n s p a c e ( tmin , tmax , 1 0 0 0 ) ; % tempi per i l p l o t
y dis = y es ( t dis );
% Runge−Kutta 23
[ t23 , u23 ] = ode23 ( f , [ tmin tmax ] , y0 ) ;
% Runge−Kutta 45
[ t45 , u45 ] = ode45 ( f , [ tmin tmax ] , y0 ) ;

% Grafico soluzione
figure ()
p l o t ( t d i s , y d i s , t45 , u45 , '−−* ' , ' l i n e w i d t h ' ,2)
l e g e n d ( ' S o l u z i o n e e s a t t a ' , ' ode45 ' )
t i t l e ( ' Soluzione ' , ' f o n t s i z e ' ,16)

1
figure ()
p l o t ( t d i s , y d i s , t23 , u23 , ' r−−o ' , ' l i n e w i d t h ' ,2)
l e g e n d ( ' S o l u z i o n e e s a t t a ' , ' ode23 ' )
t i t l e ( ' Soluzione ' , ' f o n t s i z e ' ,16)

Per equazioni differenziali del primo ordine ad una sola incognita la funzione ode23.m
(come anche ode45.m) riceve in ingresso il nome della funzione f (t, y) definita come
anonimous function. Bisogna, inoltre, passare gli istanti iniziale e finale dell’intervallo
di tempo in cui è definito il problema e il dato iniziale. Dai grafici riportati in Fig.1

Figura 1: Soluzione del problema di Cauchy con ode45 e ode23.

si nota come il passo di discretizzazione temporale non sia equispaziato. In effetti le


funzioni built-in di Matlabr odeXX utilizzano passi adattivi che sono scelti in modo
che l’errore stimato rimanga al di sotto di una certa soglia. Per ulteriori informazioni
cosultare la documentazione fornita dall’help di Matlabr .

ˆ Si calcoli l’errore assoluto puntuale dei due metodi e lo si visualizzi su di un grafico in


scala semilogaritmica.

% Runge−Kutta 23
E r r 2 3 = a b s ( u23−y e s ( t 2 3 ) ) ;
% Runge−Kutta 45
E r r 4 5 = a b s ( u45−y e s ( t 4 5 ) ) ;
% Grafico errore
figure ()
s e m i l o g y ( t23 , E r r 2 3 , t45 , E r r 4 5 , ' l i n e w i d t h ' ,2)
l e g e n d ( ' ode23 ' , ' ode45 ' )
t i t l e ( ' Errore ' , ' f o n t s i z e ' ,16)
g r i d on

La soluzione è ripostata in Fig.2

2
Figura 2: Errore assoluto del problema di Cauchy con ode45 e ode23.

Esercizio 1
L’equazione differenziale di ordine 2 dell’oscillatore smorzato è:

mx00 + cx0 + kx = 0.

Dividendo per m e ponendo γ = c/m, ω 2 = k/m diventa:

x00 + γx0 + ω 2 x = 0.

Si ponga γ = 0.1 e ω 2 = 1.

1. Dopo aver scritto l’equazione differenziale di ordine 2 sotto forma di un sistema di


due equazioni differenziali di ordine 1, scrivere la function mms che restituisce la
valutazione dei termini di destra del sistema.
Definiamo y1 (t) = x(t) e y2 (t) = x0 (t); l’equazione differenziale di ordine 2 può essere
scritta sotto forma di sistema di ODE:
y10 = y2 = f1 (t, y1 , y2 )
0 2
y2 = −γy2 − ω y1 = f2 (t, y1 , y2 )

In questo caso la funzione f (t, y) ha due componenti:

f (t, y) = [f1 , f2 ]

pertanto non può essere definita come anonimous function ma deve essere implementata
in un file a parte come vera e propria function. La function mms che restituisce la
valutazione dei termini di destra del sistema è allora:

f u n c t i o n f n = mms( t , y )
gamma = 0 . 1 ;

3
omega2 = 1 ;
[ n ,m] = s i z e ( y ) ;
f n = z e r o s ( n ,m) ;
fn (1) = y ( 2 ) ;
f n ( 2 ) = −gamma * y ( 2 ) − omega2 * y ( 1 ) ;
return

2. Risolvere il problema nell’intervallo di tempo (0, 100] con le condizioni iniziali x(0) = 2,
x0 (0) = 0 usando la function ode45 di Matlabr /Octave 1 . Verificare grafica-
mente che la soluzione
p del problema è costituita da un’oscillazione armonica di frequenza
ω1 /2π, con ω1 = 4ω 2 − γ 2 /2, smorzata nel tempo.

% vettore dei dati i n i z i a l i


y0 = [ 2 0 ] ;
% e s t r e m i d e i tempi
tmin = 0 ;
tmax = 1 0 0 ;
% Chiamata a l l a f u n z i o n e ode45 d i Matlab
[ t h , u h ] = ode45 ( ' mms ' , [ tmin , tmax ] , y0 ) ;
% Armonica
omega1 = s q r t (4−0 . 0 1 ) / 2 ;
x a r = @( t ) c o s ( omega1 * t ) ;
t d i s = linspace (0 ,100 ,1000);
figure ()
p l o t ( t d i s , x a r ( t d i s ) , t h , u h ( : , 1 ) , '−−o ' , ' l i n e w i d t h ' , 2 ) ;
l e g e n d ( ' Armonica ' , ' S o l u z i o n e a p p r o s s i m a t a d e l p r o b l e m a ' )
t i t l e ( ' Problema d e l l a m o l l a ' , ' f o n t s i z e ' , 1 6 )

Si osservi che per inserire come argomento di ode45 la funzione mms.m è necessario
passare il nome della funzione tra apici: 'mms'. Si noti, inoltre, che il dato iniziale y0
deve essere un vettore contente i dati iniziali relativi a ogni incognita.
La function mms restituisce il vettore dei tempi th e una matrice di due colonne
delle soluzioni u h. Tale matrice contiene nella prima colonna (u h(:,1)) la soluzione
approssimata relativa a y1 (t) mentre nella seconda (u h(:,2)) c’è la soluzione approssi-
mata di y2 (t). La soluzione del problema iniziale (che era costituito da un’equazione
differenziale del secondo ordine in x) è costituita dalla posizione x(t) che corrisponde a
y1 (t). La variabile y2 (t), lo ricordiamo, non è altro che la derivata prima in tempo di x
: x0 (t).
Il grafico della posizione (estratta dalla matrice u h con il comando u h(:,1)) della
massa in funzione del tempo è riportato in Figura 3.

3. Aggiungere al sistema la forzante esterna Fext = m A0 sin(ωf t), con A0 = 0.5 e ωf =


0.5. Verificare graficamente che, a regime, la soluzione del problema è un’oscillazione
1
Per compatibilità con Octave, al posto della stringa contenente il nome della funzione è necessario utilizzare
la sintassi con il function handle @ (esempio: [t,u] = ode45(@mms,[0 100],[2 0])). Questa sintassi è
compatibile anche con Matlabr .

4
armonica di frequenza ωf /2π.
Il sistema in questo caso diventa:

y10 = y2 = f1 (t, y1 , y2 )
0 2
y2 = −γy2 − ω y1 − A0 sin(ωf t) = f2 (t, y1 , y2 )

e i termini di destra vengono valutati attraverso la function mms forz:

f u n c t i o n f n = mms forz ( t , y )
gamma = 0 . 1 ;
omega2 = 1 ;
A = 0 .5 ;
wf = 0 . 5 ;
[ n ,m] = s i z e ( y ) ;
f n = z e r o s ( n ,m) ;
fn (1) = y ( 2 ) ;
f n ( 2 ) = −gamma * y ( 2 ) − omega2 * y ( 1 ) − A* s i n ( wf * t ) ;
return

La soluzione si ottiene con comandi analoghi al caso precedente; il confronto tra la


soluzione ottenuta con e senza la forzante è riportato in Figura 3.

% Chiamata a l l a f u n z i o n e ode45 d i Matlab


[ t h f , u h f ] = ode45 ( ' mms forz ' , [ tmin , tmax ] , y0 ) ;
% Armonica
omegaf = 0 . 5 ;
x a r f = @( t ) c o s ( omegaf * t ) ;
figure ()
p l o t ( t d i s , x a r f ( t d i s ) , t h f , u h f ( : , 1 ) , '−−o ' , ' l i n e w i d t h ' , 2 ) ;
l e g e n d ( ' Armonica ' , ' S o l u z i o n e a p p r o s s i m a t a d e l p r o b l e m a ' )
t i t l e ( ' Problema d e l l a m o l l a con f o r z a n t e ' , ' f o n t s i z e ' , 1 6 )

Figura 3: Andamento nel tempo del sistema massa-molla-smorzatore, con e senza forzante esterna.

5
Esercizio 2 - Dalla seconda prova del 02/07/2010
Si consideri il modello SIR che descrive, tramite un sistema di tre equazioni differenziali
ordinarie, la diffusione di un’infezione in una popolazione. Le variabili del modello sono
y1 = S, che modellizza gli individui suscettibili a infezione, y2 = I, gli individui infetti e
y3 = R, gli individui guariti dall’infezione. Il sistema di equazioni differenziali, nell’incognita
y = [y1 , y2 , y3 ]T è:  0
 y1 = −αy1 y2 = f1 (t, y1 , y2 , y3 )
0
y = αy1 y2 − βy2 = f2 (t, y1 , y2 , y3 ) (2)
 20
y3 = βy2 = f3 (t, y1 , y2 , y3 )
1. Scivere la funzione Matlabr che restituisce la valutazione dei termini noti del sistema.
L’intestazione della function sarà:

function [yp] = SIR(t,y)

In questo caso, a differenza dell’esercizio precedente, il problema di presenta già in


partenza come un sistema di tre equazioni differenziali del primo ordine in tre incognite:
y1 (t), y2 (t) e y3 (t).
Come per il problema precedente, tuttavia, la funzione f è vettoriale e deve essere
definita all’interno di una function.
La function SIR.m ha la seguente sintassi:

f u n c t i o n yp = SIR ( t , y )
% S i s t e m a SIR d e l p r i m o o r d i n e a t r e i n c o g n i t e
alpha = 1;
beta = 1;
yp = z e r o s ( s i z e ( y ) ) ; % r i g a o c o l o n n a ( a s e c o n d a d i y )
yp ( 1 ) = −a l p h a * y ( 1 ) * y ( 2 ) ;
yp ( 2 ) = a l p h a * y ( 1 ) * y (2) − b e t a * y ( 2 ) ;
yp ( 3 ) = b e t a * y ( 2 ) ;

2. Risolvere il problema nell’intervallo di tempo (0.10] con α = 1, β = 1 e condizione


iniziale y(0) = [5, 0.1, 0]T usando la function ode45 built-in di Matlabr . Riportare in
un grafico l’andamento della soluzione nel tempo.

% dati i n i z i a l i
y0 = [ 5 0 . 1 0 ] ;
% e s t r e m i tempi
tmin = 0 ;
tmax = 1 0 ;
% Chiamata a l l a f u n z i o n e ode45 d i Matlab
[ t h s i r , u h s i r ] = ode45 ( ' SIR ' , [ tmin , tmax ] , y0 ) ;

figure ()
p l o t ( t h s i r , u h s i r , '−−o ' , ' linewidth ' ,2);
l e g e n d ( ' S ' , ' I ' , 'R ' )
t i t l e ( ' D i f f u s i o n e d i un ' ' i n f e z i o n e i n una p o p o l a z i o n e ' , ' f o n t s i z e ' ,16)

6
Figura 4: Soluzione del sistema di equazioni differenziali del primo ordine SIR

In questo caso la matrice u h avrà tre colonne, una per ogni variabile yi . Inoltre, nel
caso specifico, tutte e tre le variabili sono incognite iniziali del problema e pertanto
verranno tutte plottate sul grafico (Fig.4). Dall’osservazione del grafico si evince che
all’istante iniziale una minima parte della popolazione è infetta (I), la gran parte può
ammalarsi (S) metre nessuno è ancora guarito (R). Con il passare del tempo parte della
popolazione cominica ad ammalarsi ma contemporaneamente avvendono guarigioni. Il
numero degli individui che possono ammalarsi diminuisce. Infine il numero di malati e
di soggetti che possono contrarre il virus si esaurisce e tutti guariscono!
Si noti che all’istante finale la totalità della popolazione appartiene al gruppo dei guariti,
quindi si deduce che tutti, prima o poi, hanno contratto la malattia.