[a, b] → R derivabile con continuit`a in [a, b]

Carla Guerrini
1
Approssimazione delle Derivate
Consideriamo una funzione f : [a, b] → R derivabile con continuità in [a, b]
fino ad un ordine p, con p ≥ 2. Vogliamo approssimarne la derivata prima
in un generico punto x di [a, b]. Dalla definizione di f 0 si può ritenere, per h
sufficientemente piccolo e positivo, la quantità
(δ+ f )(x) =
f (x + h) − f (x)
h
rappresenti una approssimazione di f 0 (x). L’errore che si commette può essere
ricavato dallo sviluppo in serie di Taylor di f , col resto nella forma di Lagrange,
in un intorno destro di x di ampiezza h > 0 :
f (x + h) = f (x) + hf 0 (x) +
h2
f ”(ξ)
2
ove ξ è un punto opportuno in [x, x + h]. Quindi
h
(δ+ f )(x) = f 0 (x) + f ”(ξ)
2
e quindi (δ+ f )(x) approssima f 0 (x) a meno di un errore che tende a 0 come h,
cioè è accurato al primo ordine. L’approssimazione ottenuta è detta formula
alle differenze finite in avanti.
In maniera del tutto analoga dal seguente sviluppo
f (x − h) = f (x) − hf 0 (x) +
h2
f ”(η)
2
con η ∈ [(x − h, x], possiamo ottenere la seguente formula alle differenze finite
all’indietro .
f (x) − f (x − h)
h
sempre accurata di primo ordine. Se la funzione é piú regolare, si puó fare
di meglio, sviluppiamo in serie di Taylor al secondo ordine sia in avanti che
all’indietro
(δ− f )[x) =
f (x + h) = f (x) + hf 0 (x) +
h2
h3
f ”(x) + f 000 (ξ)
2
3!
h2
h3
f ”(x) − f 000 (η)
2
3!
ove ξ ∈ [x, x + h] e η ∈ [x − h, x]. Se facciamo la differenza fra la prima e la
seconda equazione otteniamo la cosı́ detta differenza finita centrata
f (x − h) = f (x) − hf 0 (x) +
(δf )(x) =
f (x + h) − f (x − h)
2h
che è accurata di ordine 2 rispetto ad h in quanto
h2 000
f (x) − (δf )(x) =
[f (ξ) + f 000 (η)]
12
0
10/05/2011
2
dove ξ e η sono due punti opportuni appartenenti agli intervalli (x − h, x) e
(x, x + h) rispettivamente. Tale formula fornisce il coefficiente angolare della
retta passante per i punti (x − h, f (x − h)) e (x + h, f (x + h).
(7−4 x)/(x2+1)
8
7
6
5
4
3
2
1
0
x−h
−1
−2
−1.5
−1
−0.5
x
x+h
0
x
0.5
1
1.5
2
Esempio
Sia f (x) la funzione costo di un dato prodotto x, cioé f (x) indica il costo
sostenuto per produrre x. Quando la quantità prodotta subisce una variazione
(per es. un incremento) h passando da x0 a x0 +h il costo subisce una variazione
f (x0 + h) − f (x0 ), questa variazione di costo é rapportata alla variazione di
produzione che l’ha provocata, il rapporto:
∆f
f (x0 + h) − f (x0 )
=
h
h
esprime il tasso medio di variazione dei costi relativamente al variare della
produzione. Se la variazione di produzione tende a zero considerando il limite della precedente espressione, (se esiste) coincide con f 0 (x0 ), rappresenta
il costo marginale in x0 . Certi economisti dicono che il costo marginale é
il costo dell’ultima unità prodotta. Ma il costo dell’ultima unità prodotta è
chiarmente dato da
f (x0 ) − f (x0 − 1)
che solo molto grossolanamente assomiglia a f 0 (x0 ).
Se una funzione di costo f1 ha in x0 un costo marginale maggiore rispetto ad
un’altra funzione di costo f2 significa che f1 è più sensibile ai cambiamenti di
produzione, basta di poco aumentare la produzione che si ha un’impennata
dei prezzi (o costi). Se invece f (x) indica il profitto o guadagno, gli stessi
discorsi portano al cosı́ detto profitto marginale in x0 . Il significato geometrico
è ben noto: la derivata in x0 è il coefficiente angolare della retta tangente alla
curva (x0 , f (x0 ).
10/05/2011
3
Esercizio
A particolari istanti temporali t è stata misurata la quota q(t) raggiunta da
un fluido all’interno di un imbuto conico retto che presenta un foro circolare
sul fondo di raggio r = 10cm, ottenendo i seguenti valori:
t
0.0 5
10
q(t)
1.0 0.8811 0.7366
15
20
0.5430
0.1698
Sapendo che all’istante iniziale il fluido raggiunge la quota di 1m, si vuole ottenere una stima della velocità di svuotamento q 0 (t) dell’imbuto da confrontare
con quella attesa per via teorica data da
q
q 0 (t) = −0.6πr2 19.6q(t)/A(t)
essendo r il raggio del foro ed A(t) l’area della sezione orizzontale del cono determinata dal fluido quando si trova a livello q(t). Risolvendo questo problema
utilizzando le differenze in avanti, all’indietro e centrate per approssimare q 0 (t)
otteniamo
t
0.0
5
10
15
20
q’(t)
-0.0220
-0.0259
-0.0326
-0.0473
-0.1504
δ+q
-0.0238
-0.0289
-0.0387
-0.0746
–
δ− q
–
-0.0238 -0.0289
-0.0387
-0.0746
δq
–
-0.0263 -0.0338
-0.0567
–
Come si vede l’accordo fra la derivata esatta e quella calcolata sulla base delle
misure è più soddisfacente quando si usano le differenze centrate.
Esempio: Un semplice problema differenziale
Nelle equazioni differenziali l’incognita non é un numero o un vettore, ma una
o piú funzioni di cui si conoscono relazioni che legano la funzione stessa a un
certo numero di derivate successive. Consideriamo per ora il discorso a livello
intuitivo e consideriamo il seguente problema ai limiti:
−u”(x) = f (x),
u(0) = α,
0≤x≤1
u(1) = β.
Supponiamo che le funzioni coinvolte siano regolari, per esempio si richiede
che la funzione f sia continua, mentre la funzione u sia derivabile due volte
con derivata seconda continua. Il modello appena scritto richiede di trovare
una funzione u : [0, 1] → R la cui derivata seconda sia uguale ad una assegnata funzione f . Inoltre si richiede che la funzione u(x) assuma in x = 0 il
10/05/2011
4
valore α e in x = 1 il valore β. Vogliamo trasformare il problema in un problema di dimensione finita, (per come é posto il problema non ha dimensione
finita, perché devo scovare una intera funzione) per cui si vuole discretizzare
il modello. Introduciamo una suddivisione dell’intervallo [0, 1] con n + 2 punti
equidistanti, l’ampiezza di ogni sottointervallo sará indicata con h:
0 = x0 < x1 = h < x2 = 2h < . . . < xi = ih < . . . < xn+1 = 1
1
dove ovviamente h = n+1
. Indichiamo con ui , i = 0, . . . , n + 1 i valori approssimati della funzione u(xi ) nei punti della suddivisione. Che relazioni ci sono
tra tali valori?
Utilizziamo l’equazione che lega u” alla funzione f (x). Approssimiamo la
derivata della funzione u(x) con un opportuno rapporto incrementale. Abbiamo svariate scelte, per esempio, se x é uguale a xi con i = 1, . . . , n (punti
interni all’intervallo),
u(x + h) − u(x)
,
h
u(x) − u(x − h)
,
h
u(x + h) − u(x − h)
.
2h
L’ultima approssimazione a causa della sua simmetria é la piú accurata. Per
la derivata seconda possiamo scegliere la seguente approssimazione che fa intervenire solo i punti x, x − h, e x + h ed é simmetrica
u”(x) '
u(x + h) − 2u(x) + u(x − h)
h2
Il rapporto incrementale approssima la derivata seconda a meno di un certo
errore. Nel limite h → 0 si ottiene la derivata seconda, ma noi ci fermiamo
per un h fissato. Possiamo sostituire al posto dei valori u(x), u(x ± h) i valori
approssimati ui che soddisferanno
−ui+1 + 2ui − ui−1
= f (xi ),
h2
f or
i = 1, . . . , n
Moltiplicando le equazioni scritte per h2 si ottiene infine il sistema lineare
−ui+1 + 2ui − ui−1 = h2 f (xi ),
i = 1, . . . , n.
Per il caso i = 1 si ha inoltre che ui−1 = u0 = α per cui la prima equazione
(prima riga del sistema) si puó scrivere come
−u2 + 2u1 = h2 f (x1 ) + α,
e analogamente l’ultima equazione si scriverá (essendo un+1 = β)
2un − un−1 = h2 f (xn ) + β.
10/05/2011
5
Per esempio nel caso in cui n = 5,








α = 0,
2 −1
0
0
0
−1
2 −1
0
0
0 −1
2 −1
0
0
0 −1
2 −1
0
0
0 −1
2








u1
u2
u3
u4
u5
β = 0 si ottiene il sistema








 = h2 






f (h)
f (2h)
f (3h)
f (4h)
f (5h)




,



dove h = 1/6. in generale si ottiene un sistema lineare n × n con matrice
A a banda e con elementi aij nulli se |i − j| > 1 , matrici di questo tipo
sono tridiagonali. L’ampiezza della banda é uguale a 1, la matrice A é inoltre
simmetrica. In MatLab la matrice del sistema per questo semplice problema
puó essere ottenuta tramite un’unica istruzione. Se n = 5 la matrice precedente
si genera con
A = diag(2 ∗ ones(n, 1)) − diag(ones(n − 1, 1), 1) − diag(ones(n − 1, 1), −1);
10/05/2011
6
Schemi alle differenze finite per funzioni in due variabili
Nel caso in cui la funzione dipenda da due variabili, i concetti esposti precedentemente vanno estesi al caso di derivate parziali. Per semplicitá si consideri di forma rettangolare lo spazio in cui si vuole studiare la funzione. Possiamo immaginare che la funzione f sia la distribuzione della temperatura
in un ambiente. Nel piano un punto é individuato da una coppia di indici
(i, j), i = 1, . . . , N ; j = 1, . . . , M e che i nodi siano distribuiti in modo uniforme (vedi la figura sottostante i nodi che hanno lo stesso indice i hanno il
medesimo valore della coordinata x). In pratica si tratta di utilizzare le stesse
formule scritte in precedenza, facendo variare solo l’indice relativo alla variabile
rispetto alla quale si deve effettuare la derivata mantenendo fisso l’altro.
7
j 1 −−−−−−−−−−−−−−−−−−> M
6
5
4
3
2
1
0
0
2
4
6
i 1 −−−−−−−−−−−−−−−−−−> N
8
10
Utilizzando la funzione in due variabili g(i, j) e facendo variare solo l’indice
relativo alla variabile rispetto alla quale si vuole differenziare, mantenedo fisso
l’altro
δg
g(i + 1, j) − g(i − 1, j)
(i, j) =
δx
2∆x
rappresenta la derivata parziale rispetto a x valutata nel nodo (i, j) in modo
simile
g(i, j + 1) − g(i, j − 1)
δg
(i, j) =
δy
2∆y
g(i + 1, j) − 2g(i, j) + g(i − 1, j)
δ2g
(i, j) =
e
2
δx
∆x2
δ2g
g(i, j + 1) − 2g(i, j) + g(i, j − 1)
(i,
j)
=
,
δy 2
∆y 2
rappresentano rispettivamente la derivata parziale rispetto a y nel nodo (i, j)
e le derivate seconde.
10/05/2011
7
Equazione di Laplace e soluzione numerica
Molti problemi sono descritti da una equazione differenziale del tipo
δ2f
δ2f
+
=b
δx2
δy 2
nota come equazione di Poisson. In questa equazione f (x, y) rappresenta la distribuzione di una qualche variabile fisica (per esempio la temperatura) mentre
b(x, y) rappresenta la sorgente (per esempio l’intensitá di una fonte di calore).
In molti problemi il termine sorgente é nullo in tutto il dominio e l’equazione
assume la forma
δ2f
δ2f
+
=0
δx2
δy 2
nota come equazione di Laplace (questa equazione é stata impiegata nella teoria del Rischio, nello studio della probabilitá del fallimento di una compagnia
di assicurazione oltre che in numerosi problemi di fisica e ingegneria). Per la
soluzione delle equazioni di Poisson o Laplace é necessario assegnare le condizioni al contorno. Nei problemi di fisica queste condizioni possono essere di
due tipi: in alcuni casi viene assegnata la medesima variabile f , mentre in altri viene assegnata la sua derivata normale. Il primo caso viene indicato come
condizioni di Dirichlet (caso in cui, per esempio, si conosce la temperatura su
tutto il contorno), nel secondo condizioni di Neumann (caso in cui la sorgente
di calore é posizionata sul contorno).
Come esempio viene presentata la soluzione numerica dell’equazione di
Laplace in un dominio rettangolare con condizioni di Dirichlet assegnata al
contorno. Si consideri la lastra piana rettangolare di lati Lx = 5 e Ly = 4,
i lati vengono discretizzati rispettivamente con n = 5, e m = 4, di conseguenza ∆x = Lnx = ∆y = Lmy = 1, l’intera lastra é quindi suddivisa in
(n + 1) × (m + 1) nodi, ognuno dei quali individuano una coppia (i, j) con
i = 0, . . . , n, e j = 0, . . . , m. Poiché la funzione é nota sul bordo saranno note
le quantitá f (0, j), f (5, j), j = 0, . . . 4 e f (i, 0), f (i, 4), i = 1, . . . , 5 sono date.
Utilizzando le differenze del secondo ordine scritte precedentemente e ricordando che ∆x = ∆y = 1 le espressioni delle derivate seconde si semplificano
ulteriormente per cui:
δ2f
= f (i+1, j)−2f (i, j)+f (i−1, j);
δx2
δ2f
= f (i, j +1)−2f (i, j)+f (i, j −1).
δy 2
Sostituendo queste due espressioni nell’equazione di Laplace in corrispondenza
del nodo (i, j) si ottiene
f (i, j − 1) + f (i − 1, j) − 4f (i, j) + f (i + 1, j) + f (i, j + 1) = 0
Questa equazione va scritta per i = 1, . . . , 4 e j = 1, . . . , 3 tenendo conto che i
valori di f nei nodi al contorno sono noti, quindi per il nodo (1, 1) avremo
−4f (1, 1) + f (2, 1) + f (1, 2) = −f (1, 0) − f (0, 1)
per il nodo (2, 1) in modo simile si ha
f (1, 1) − 4f (2, 1) + f (3, 1) + f (2, 2) = −f (2, 0)
10/05/2011
8
nei nodi con entrambi gli indici superiori a 1 e inferiori a n − 1 e m − 1
rispettivamente nessuno dei termini che compare nella somma é di bordo e
quindi tutti i contributi sono incogniti, per esempio nel nodo (3, 2) la differenza
prende la seguente forma:
f (3, 1) + f (2, 2) − 4f (3, 2) + f (4, 2) + f (3, 3) = 0
raccoglendo tutte le equazioni si ottiene un sistema lineare del tipo Ax = b ove













a=











−4
1
0
0
1
0
0
0
0
0
0
0
1
−4
1
0
0
1
0
0
0
0
0
0
0
1
−4
1
0
0
1
0
0
0
0
0
0
0
1
−4
1
0
0
1
0
0
0
0
1
0
0
1
−4
1
0
0
1
0
0
0












b=












0
1
0
0
1
−4
1
0
0
1
0
0
0
0
1
0
0
1
−4
1
0
0
1
0
0
0
0
1
0
0
1
−4
1
0
0
1
0
0
0
0
1
0
0
1
−4
1
0
0
−f (1, 0) − f (0, 1)
−f (2, 0)
f − (3, 0)
−f (4, 0) − f (5, 1)
−f (0, 2)
0
0
−f (5, 2)
−f (0, 3) − f (1, 4)
−f (2, 4)
−f (3, 4)
−f (4, 4) − f (5, 4)
0
0
0
0
0
1
0
0
1
−4
1
0
0
0
0
0
0
0
1
0
0
1
−4
1
0
0
0
0
0
0
0
1
0
0
1
−4













;
























x=











f (1, 1)
f (2, 1)
f (3, 1)
f (4, 1)
f (1, 2)
f (2, 2)
f (3, 2)
f (4, 2)
f (1, 3)
f (2, 3)
f (3, 3)
f (4, 3)

























La struttura della matrice risulta essere pentadiagonale e decisamente sparsa,
a diagonale dominante questo consente di utilizzare procedimenti iterativi indispensabili per la soluzione di problemi con un numero elevato di incognite.













,











10/05/2011
9
Equazioni differenziali ordinarie
Una equazione differenziale é una equazione che coinvolge una o piú derivate
di una funzione incognita. Se sono tutte derivate ordinarie l’equazione si
dice Equazione Differenziale Ordinaria (ODE), se ci sono anche delle derivate
parziali l’equazione si dice alle Derivate Parziali (PDE). Si dice che é una
equazione differenziale ordinaria di ordine p se p é l’ordine massimo delle
derivate che vi compaiono.
In generale posti



y(t) = 


y1 (t)
y2 (t)
..
.




;




f (t, y(t)) = 


e
f1 (t, y1 (t), . . . , yn (t))
f2 (t, y1 (t), . . . , yn (t))
..
.



,


fn (t, y1 (t), . . . , yn (t))
yn (t)
si chiama sistema di equazioni differenziali del primo ordine un sistema di
equazioni della forma
y 0 (t) = f (t, y(t))
(1)
ove le funzioni f1 , f2 , . . . , fn sono assegnate. Una insieme ordinato di funzioni
y1 (t), . . . , yn (t) definite in un intervallo [t0 , t1 ] e in esso differenziabile che soddisfano in t la relazione
yi0 (t) = fi (t, y1 (t), . . . , yn (t)),
per
i = 1, . . . , n
si dice soluzione del sistema (1). Una equazione differenziale ordinaria di ordine
n é una relazione della forma
F (t, y(t), y 0 (t), y (2) (t), . . . , y (n) (t)) = 0
(2)
essa lega la variabile t, una funzione y(t) incognita e le sue derivate y 0 (t),
. . . , y (n) (t). Si dice soluzione dell’equazione differenziale una funzione y(t)
continua e derivabile che soddisfa identicamente la relazione (2). Se é possibile
esplicitare la y (n) (t) allora l’equazione precedente puó essere scritta in forma
normale
(3)
y (n) (t) = ϕ(t, y(t), y 0 (t), y (2) (t), . . . , y (n−1) (t)).
Ogni equazione differenziale ordinaria di ordine n > 1 esprimibile in forma
normale puó essere ridotta ad un sistema di n equazioni del primo rodine

y1 (t)




 y2 (t)
..


.



= y(t)
= y 0 (t)
yn (t) = y (n−1) (t)
Se le funzioni y1 (t), y2 (t), . . . , yn (t) soddisfano il sistema
 0
y1 (t)




 y 0 (t)
2
= y2 (t)
= y3 (t)
..


.


 0
yn (t) = ϕ(t, y1 (t), . . . , yn (t))
10/05/2011
10
risolvere l’equazione (3) equivale a risolvere il sistema. Una equazione si dice
lineare se vale
a0 (t)y (n) (t) + a1 (t)y (n−1) (t) + . . . + an (t)y(t) = b(t).
Se ai (t) = ai l’equazione si dice lineare a coefficienti costanti. In generale, un
sistema di equazioni differenziali del primo ordine ha infinite soluzioni. Geometricamente l’insieme delle soluzioni forma un insieme di curve dello spazio
Rn+1 dette curve integrali del sistema. L’insieme delle curve integrali si dice
anche campo direzionale associato al sistema e permette di controllare visivamente l’andamento delle soluzioni. Per ogni punto (t∗ , y ∗ ) passa una curva
integrale che in (t∗ , y ∗ ) é tangente alla direzione f (t∗ , y ∗ ). É possibile associare
ad ogni punto un vettore con la direzione della tangente alla curva integrale
che passa per il punto y 0 (t∗ ) = f (t∗ , y ∗ (t∗ )). Per individuare una sola soluzione
tra le infinite soluzioni del sistema differenziale si aggiunge una condizione,
che consiste nell’imporre che la soluzione assuma in un punto un determinato
valore. Problemi di questo tipo descrivono il moto di un sistema dinamico nel
tempo (esempio y 0 (t) é la velocitá se y(t) é lo spazio).
campo direzionale per eq.differenz. y"=exp(−2t)−2y
2
1.5
1
0.5
0
−0.5
−1
−2
−1
0
1
2
3
Esempio: Problema
Consideriamo una popolazione di batteri posta in un ambiente limitato nel
quale non possono convivere piú di B batteri. Supponiamo che inizialmente
la popolazione abbia un numero di individui pari a y0 ¿ B e che il fattore
di crescita dei batteri sia pari a una costante C. In questo caso il cambiamento della popolazione di batteri nel tempo sará proporzionale al numero
di batteri preesistenti, modulato dal fatto che piú di B batteri non possono
convivere contemporaneamente. Questo fenomeno é esprimibile dall’equazione
differenziale
y
dy
= Cy(1 − ),
dt
B
ove y = y(t) indica il numero di batteri al tempo t.
La sua risoluzione consente di stabilire l’evoluzione della popolazione batterica.
10/05/2011
11
Questa ammette come soluzione tutte le funzioni che soddisfano la relazione
y(t) =
Bψ(t)
(B + ψ(t))
con ψ(t) = eCt+K e K costante.
Se imponiamo che y(0) = 1
1=
BeK
,
(B + eK )
K = ln(
B
).
B−1
Se ora supponiamo che due popolazioni batteriche y1 , y2 siano in competizione fra loro, all’equazione differenziale si dovranno sostituire le due
equazioni:
dy1
= C1 y1 (1 − b1 y1 − d2 y2 ),
dt
dy2
= C2 y2 (1 − b2 y2 − d1 y1 ),
dt
dove C1 e C2 sono fattori di crescita (positivi) delle due popolazioni batteriche.
I coefficienti d1 ed2 si riferiscono all’interazione tra le due popolazioni, mentre
b1 e b2 sono legati dall’abbondanza dei nutrienti. Queste ultime costituiscono
il sistema delle equazioni di Lotka-Volterra e sono alla base di numerose applicazioni.
Per un problema ai valori iniziali si intende che sono assegnate delle condizioni
iniziali del tipo y(x0 ) = y0 . Nel caso di problemi con valori al contorno boundary value problem, che nella pratica si incontrano molto spesso, si cerca la
soluzione y(x) sull’intervallo (a, b) che soddisfa una condizione ai bordi della
forma
r(y(a), y(b)) = 0
Una equazione differenziale ordinaria ammette in generale infinite soluzioni.
Per fissarne una é necessario imporre una condizione, per esempio il valore
assunto dalla soluzione in un punto dell’intervallo di integrazione.
10/05/2011
12
Esistenza e Unicitá della soluzione
Definizione 1. Data una funzione f : [t0 , t∗ ] → Rn , si chiama problema
di Cauchy il problema della ricerca di una funzione y(t) continua e derivabile
su [t0 , t∗ ] a valori in Rn tale che
(
y 0 (t) = f (t, y(t)) t0 ≤ t ≤ t∗
y(t0 ) = y0 .
(4)
Il problema di Cauchy consiste nel determinare tra le curve integrali
dell’equazione y 0 (t) = f (t, y(t)) quella che passa per il punto (t0 , y0 ). Supponiamo che la funzione f (t, y(t)) sia definita e contiunua nella regione
S = {(t, y), |t ∈ [t0 , t∗ ], y ∈ Rn },
[t0 , t∗ ] limitato
supponiamo anche che esista una costante L detta costante di Liptshitz, per
cui
kf (t, y) − f (t, z)k ≤ Lky − zk,
∀t ∈ [t0 , t∗ ],
∀y, z ∈ Rn .
(5)
Allora per ogni vettore assegnato y0 esiste una ed una sola funzione y(t)
che soddisfa le seguenti condizioni:
• y(t) é continua assieme alla sua derivata prima in [t0 , t∗ ], cioé y ∈ C[t10 ,t∗ ]
• y 0 (t) = f (t, y(t)) per t ∈ [t0 , t∗ ];
• y(t0 ) = y0 .
Inoltre per la soluzione y(t; t0 , u) del problema
(
y 0 (t) = f (t, y(t)) t0 ≤ t ≤ t∗
y(t0 ) = u.
si deduce la seguente relazione
ky(t; t0 , u) − y(t; t0 , v)k ≤ eL|t−t0 | ku − vk.
(6)
Quest’ultima relazione ci assicura la dipendenza con continuitá della soluzione
del problema di Cauchy dal valore iniziale. Possiamo inoltre osservare che se
∂fi
, i, j = 1, . . . , n esistono nella regione
le derivate parziali ∂y
j
S = {(t, y), |t ∈ [t0 , t∗ ], −∞ < yi < ∞, i = 1, . . . , n},
e sono continue e limitate, allora si puó prendere
L = sup k
(t,y)∈S
k = maxi
dove k ∂f
∂y
Pn
∂fi
j=1 | ∂yj |.
∂f
k
∂y
[t0 , t∗ ] limitato
10/05/2011
13
Il problema di Cauchy per (3) (sistema di equazioni diff.) richiede di determinare una soluzione y(t) che soddisfa le condizioni iniziali
y(t0 ) = µ1 , y 0 (t0 ) = µ2 , . . . , y (n−1) (t0 ) = µn
ove i numeri µ1 , . . . , µn , sono assegnati.
Il teorema precedente mostra che se f é continua e lipschitziana il problema
di Cauchy é ben posto secondo Hadamard in quanto la soluzione esiste, é
unica e dipende con continuitá dai dati iniziali. Si osserva inoltre che la sola
continuitá della f (t, y) non é sufficiente ad assicurare l’unicitá della soluzione,
perché assicura solo l’esistenza mentre la lipschitzianitá assicura l’unicitá.
Spesso nelle applicazioni la derivata di f rispetto a y oppure le derivate parziali
∂fi
nel caso di sistema, esistono e sono continue, ma non limitate in S. In
∂yj
questo caso, mentre il problema di Cauchy é ancora risolubile, la soluzione
y(t) puó essere definita solo in un intorno di t0 , che puó dipendere anche da
y0 , e non su tutto l’intervallo [t0 , t∗ ].
Data una funzione f : R → R, diciamo che f é regolare e uniformemente
monotona decrescente se f é differenziabile e la sua derivata soddisfa
−M ≤ f 0 (x) ≤ −m < 0
per ogni x, dove M e m sono costanti positive.
Condizionamento del problema e dipendenza della soluzione dai
dati
Osservando la relazione (6) la ben posizione secondo Hadamard non é sufficiente per la risoluzione del problema numerico in quanto il fattore eL|t−t0 |
puó essere grande. In questi casi piccole perturbazioni sui dati iniziali possono
corrispondere grandi perturbazioni sulla soluzione. Consideriamo il problema
(
y 0 (t) = f (t, y(t)) t0 ≤ t ≤ t∗
y(t0 ) = y0 .
(7)
e assumiamo che la funzione f (t, y(t)) soddisfi una condizione meno restrittiva
della condizione di Lipschitz, cioé supponiamo che esista una funzione ν(t)
continua a tratti in [t0 , t∗ ] per cui
< f (t, y) − f (t, z), y − z >≤ ν(t)ky − zk2
(8)
per ogni t ∈ [t0 , t∗ ] e per ogni coppia y, z ∈ Rn . Questa condizione viene chiamata condizione di Lipschitz unilaterale. La condizione (8) é meno restrittiva
di (5), poiché se vale quest’ultima e applicando la disuguaglianza di Schwartz,
si ha
| < f (t, y) − f (t, z), y − z >≤ kf (t, y) − f (t, z)kky − zk ≤ Lky − zk2
per cui dalla (5) deduciamo (8), ma non il viceversa.
10/05/2011
14
La condizione (8) serve per trattare in modo differente le equazioni campione y 0 = y e y 0 = −y.
• y 0 = y la condizione (8) risulta
< y − z, y − z >= ky − zk2 ≤ ν(t)ky − zk2 , quindi ν(t) = 1.
• y 0 = −y la condizione (8) é
< −y + z, y + z >= −ky − zk2 ≤ ν(t)ky − zk2 quindi ν(t) = −1.
Per ambedue le equazioni la costante di Lipschitz L = 1.
Consideriamo il problema perturbato
(
dy² (t)
dt
= f (t, y² (t)) + ²1 ψ(t) t0 ≤ t ≤ t∗
y² (t0 ) = η + ²0 σ.
(9)
dove ψ é un vettore di n componenti continue in [t0 , t∗ ], σ ∈ Rn e ²0 , ²1
sono numeri reali. Si suppone che la funzione f sia continua in S e soddisfi la
(8), in tal caso vale il seguente
Teorema Se f (t, y(t)) é continua in S e soddisfa la (8) allora ∀t ∈ [t0 , t∗ ]
le soluzioni del sistema (7) e del sistema (9) soddisfano la disuguaglianza
µ
L(t)
ky(t) − y² (t)k ≤ e
k²0 σk +
Z t
t0
¶
−L(τ )
e
k²1 ψ(τ )kdτ ,
ove L =
Z t
t0
ν(τ )dτ.
(10)
Sappiamo che il problema di Cauchy (7) quando la funzione f (t, y) soddisfa
la condizione di Lipschitz é un problema ben posto cioé si ha per la soluzione
esistenza unicitá e dipendenza continua dai dati. Da un punto di vista numerico la dipendenza continua dai dati é essenziale dal momento che si opera
su quantitá affette da errori, ma puó non essere sufficiente per una adeguata
approssimazione numerica, perché non garantisce che gli errori trasmessi dai
dati sulle soluzioni siano piccoli.
Occorre che il problema si ben condizionato. Si tratta di una richiesta piú
fine della dipendenza continua dai dati, perché con essa si vuole che a piccole
variazioni sui dati corrispondano piccole variazioni sui risultati (stabilitá numerica). Il teorema precedente mostra che il problema (7) é ben condizionato
quando il numero di condizione
Z t
max exp(
t0 ≤t≤t∗
t0
ν(τ )dτ )
non é troppo grande.
Tornando ai nostri due problemi campioni si ha che
• y 0 = y;
• y 0 = −y;
ν(t) = 1 quindi il problema é mal condizionato;
ν(t) = −1 quindi il problema é ben condizionato.
10/05/2011
15
Come caso particolare studiamo la stabilitá numerica del seguente problema
perturbato:
(
y² (t) = f (t, y² (t)) t0 ≤ t ≤ t∗
(11)
y² (t0 ) = η + ²
Si ha:
y² (t) = y² (t0 ) +
e
y(t) = y(t0 ) +
Z t
t0
Z t
t0
f (τ, y² (τ ))dτ
f (τ, y(τ ))dτ,
con y(t0 ) = η.
sottraendo si ottiene
Z t
y² (t) − y(t) = ² +
t0
f (τ, y² (τ )) − f (τ, y(τ ))dτ.
Ponendo z(t) = y² (t) − y(t) e applicando il teorema del valor medio si ha
Z t
∂f (τ, y(τ )
z(t) = ²+
t0
∂y
ovvero z 0 (t) =
z(t)dτ,
∂f (τ, ξ)
z(t),
∂y
con z(t0 ) = ²
dove ξ é nell’intorno di y(t). quindi
Z t
∂f (τ, ξ)
z(t) = ²exp(
t0
∂y
Il numero di condizione del problema é exp(
Z t
∂f (τ, ξ)
y² (t) − y(t) ∼ exp(
t0
∂y
dτ ).
R t ∂f (τ,ξ)
t0
∂y
dτ ) e si ha che
dτ )ky² (t0 ) − y(t0 )k
per t ≥ t0 , quindi la differenza diminuisce se ∂f
< 0 oppure aulmenta se
∂y
∂f
> 0. In conclusione il problema di Cauchy é ben condizionato quando
∂y
∂f
< 0, tuttavia se il modulo di ∂f
é grande si ha un problema di tipo stiff.
∂y
∂y
Esempio(problema mal condizionato)
1
soluzione generale y(t) = e3t (C + e−3t (t + ))
3
(
In questo caso C =
perturbato
1
,
3
y 0 (t) = 3y − 3t
y(0) = 13
si osserva che L = 3(t − t0 ), ν(t) = 3 Problema
(
y 0 (t)
= 3y − 3t
y(0) = 31 + ²
y² (t) = y(t) + ²e3t = t + 31 + ²e3t . Per t = 5 si ha che y² (t) = 16
+ ²e15 . Se ² é la
3
precisione di macchina non trovo neppura una figura corretta nella soluzione.
10/05/2011
16
Sfortunatamente solo un numero limitato di equazioni differenziali ordinarie puó essere risolto analiticamente, ma anche se é possibile trovare la
soluzione in linea teorica, nella pratica a volte non si riesce a calcolarla. Cerchiamo quindi dei metodi numerici in grado di approssimare la soluzione per
ogni classe di equazioni differenziali ordinarie che ammettono una soluzione.
La strategia generale di tali metodi consiste nel dividere l’intervallo di
integrazione I in sottointervalli [tn , tn+1 ] di ampiezza h. Il parametro h é
detto passo di discretizzazione. Si cerca, quindi, per ogni nodo tn un valore
incognito un che approssimi yn = y(tn ). Il metodo numerico genera una
successione di valori um che approssimano la soluzione y(t) nei punti tm . Il
metodo numerico é una equazione alle differenze che date le approssimazioni
um+j , j = 0, . . . , k permette di calcolare um+k+1 . L’intero k indica il numero
di passi del metodo; se k = 1 il metodo é detto metodo ad un passo, se k > 1
é detto a piú passi.
Consideriamo una partizione tm dell’intervallo I = [a, b] in cui é definito il
problema di Cauchy,
(
y 0 (t) = f (t, y(t)) a ≤ t ≤ b
y(a) = η.
(12)
b−a
h
dove h é il passo di integrazione. Indichiamo con um una approssimazione di
y(tm ) su questa partizione. La formula generale di un metodo a k passi é data
dalla seguente formula alle differenze:
tm = a + mh,
m = 0, 1, . . . , N ;
N=
 Pk


j=0 αj um+j = hϕ(h, tm , ; um , um+1 , . . . , um+k ; f )


uµ = ηµ (h)
(13)
µ = 0, 1, . . . , k − 1
Supporremo che la funzione ϕ sia continua rispetto a tutte le variabili e
lipschtziana rispetto alla variabile u, cioé
kϕ(h, tm , ; um , um+1 , . . . , um+k ; f ) − ϕ(h, tm , ; vm , vm+1 , . . . , vm+k ; f )k ≤
≤M
k
X
kum+j − vm+j k,
j=0
dove M é una costante che non dipende da h. Supponiamo inoltre che
ϕ(h, tm , ; um , um+1 , . . . , um+k ; 0) = 0. A questa classe generale appartengono
numerosi metodi, essi possono essere cosı́ suddivisi:
• metodi Runge-Kutta impliciti ed espliciti;
• metodi lineari a piú passi di Adam-Bashforth e Adams-Multon,
• metodi alle differenze all’indietro
• metodi predictor corrector
10/05/2011
17
Convergenza
Nel caso in cui h → 0 la partizione tm diventa l’intervallo continuo [a, b].
Una proprietá naturale che occorre richiedere ad un metodo numerico é che al
limite per h tendente a zero la soluzione discreta um diventi la soluzione esatta
y(t). Quindi un metodo si dice convergente se per ogni problema del tipo (12)
lim um = y(tm )
h→0
per ogni t ∈ [a, b] e per tutte le soluzioni {um } che soddisfano le condizioni
iniziali uµ = ηµ per cui
lim
h→0
t = a + mh
ηµ (h) = η,
µ = 0, 1, . . . , k − 1
Oppure in modo equivalente
max ky(tm ) − um k →h→0 0.
a≤t≤b
Si noti che questa condizione richiede implicitamente la convergenza dei nodi
iniziali.
Si osservi anche che un metodo numerico affinché sia convergente
l’equazione alle differenze deve risultare una approssimazione sufficientemente
accurata dell’equazione differenziale.
Consistenza
Consideriamo il vettore residuo
τm+k = Rm+k =
k
X
αj ym+j − hϕ(h, tm ; ym , . . . , ym+k ; f ),
j=0
chiamato anche errore locale di troncamento in tm+k . Il metodo si dice consistente con l’equazione differenziale se il residuo Rm+k soddisfa la condizione
µ
lim
h→0
t = a + mh
¶
1
Rm+k = 0.
h
La simbologia scritta sotto il limite indica che simultaneamente h → 0 e m →
∞ in modo tale che t = a + mh rimanga fisso. Si osservi che se h → 0 e m é
fisso allora t → a. Si considera fisso il valore di t. Inoltre se si chiedesse solo
che limh→0 Rm+k si avrebbe solo che
lim
h→0
X
αj ym+j = 0
e quindi solo una condizione sugli αj e non su ϕ. Il residuo é costruito a
partire dalle equazioni alle differenze sostituendo in esse la soluzione esatta
alla soluzione approssimata. Essa non soddisfa esattamente l’equazione alle
differenze e la discrepanza che si ottiene é l’errore locale di troncamento. La
consistenza é condizione necessaria per la convergenza. Infatti un metodo
10/05/2011
18
(13) convergente é consistente. La convergenza implica la consistenza, ma il
viceversa non é vero.
Stabilitá
Puó accadere che un metodo numerico applicato a un dato problema soffra
di instabilitá numerica intrinseca che persiste anche al limite per h tendente
a zero e impedisce la convergenza. In pratica abbiamo la soluzione numerica
un soddisfa l’equazione alle differenze mentre y(tn ) soddisfa entro una certa
accuratezza una perturbazione dell’equazione alle differenze. Per la convergenza occorre che un sia insensibile a perturbazioni ossia stabile rispetto a tali
perturbazioni.
Consideriamo il problema differenziale (12) e si perturbino sia la funzione
f sia il dato iniziale η. Sia z(t) la soluzione del problema perturbato
(
z 0 (t) = f (t, z(t) + δ(t)) t ∈ [a, b]
z(a) = η + δ
Siano (δ(t), δ) e (δ ∗ (t), δ ∗ ) due perturbazioni di (12)e siano z(t) e z ∗ (t) le
corrispondenti soluzioni dei problemi perturbati. Se esiste C > 0 tale che
kz(t) − z ∗ (t)k ≤ C² ∀t ∈ [a, b]
quando
kδ(t) − δ ∗ (t)k ≤ ² e kδ − δ ∗ k ≤ ²
allora il problema a valori iniziali é detto stabile.
Ogni metodo numerico applicato a (12) introduce errori di discretizzazione
e arrotondamento che possono essere interpretati come perturbazioni del problema originario, se il problema non é totalmente stabile allora nessun metodo
ha speranza di produrre una soluzione accettabile. Lo stesso vale se l’equazione
alle differenze introdotta dal metodo é essa stessa troppo sensibile alle perturbazioni. Per questo motivo si considerano gli effetti delle perturbazioni sulla
ϕ e sui valori iniziali η. Una soluzione perturbata {vn , n = 0, 1, . . . , m} di (13)
soddisfa l’equazione alle differenze perturbata
( P
k
αj vm+j = hϕ(h, tm ; vm , vm+1 , . . . , vm+k ; f ) + δm+k
vµ = ηµ (h) + δµ µ = 0, 1, . . . , k − 1
j=0
(14)
dove {δm , m = 0, 1, . . . , N } é la perturbazione.
n
o
Siano {δm , m = 0, 1, . . . , N } e δ̃m , m = 0, 1, . . . , N due perturbazioni e
siano {vm , m = 0, 1, . . . , N } e {ṽm , m = 0, 1, . . . , N } le corrispondenti soluzioni
perturbate. Se esistono due costanti σ e h0 per cui ∀h ∈ (0, h0 ], si verifica la
condizione
kvm − ṽm k ≤ σ² 0 ≤ m ≤ N
quando kδm − δ̃m k ≤ ², 0 ≤ m ≤ N si dice che il metodo é zero stabile.
Il concetto di zero stabilitá é connesso strettamente alla stabilitá dell’equazione
alle differenze quando h tende a zero.
10/05/2011
19
Occorre ribadire che
• la zero-stabilitá é connessa con ció che accade quando h tende a zero.
• La zero stabilitá é una proprietá del metodo e non del problema
che corrisponde alla richiesta che l’equazione alle differnze sia insensibile
alle perturbazioni, ossia che l’equazione alle differenze sia ben posta.
• se il metodo non é zero-stabile, le soluzioni ottenute con due precisioni diverse potrebbero essere infinitamente distanti, indipendentemente dalla
precisione utilizzata ( cioé interpreto gli errori di arrotondamento e rappresentazione come perturbazioni).
Del metodo (13) consideriamo il primo polinomio caratteristico
ρ(z) =
k
X
αj z j .
j=0
Il metodo si dice che soddisfa le condizioni delle radici se tutte le radici del
polinomio caratteristico sono minori o uguali a 1 in modulo e quelle in modulo
uguali a 1 sono semplici. Infatti per h → 0 il metodo (13) tende all’equazione
alle differenze
k
X
αj ym+j = 0
j=0
il cui polinomio caratteristico coincide con ρ(z). Non sorprende dunque che sia
la localizzazione delle radici di ρ(z) a controllare la zero-stabilitá del metodo.
Siano z1 , z2 , . . . , zk le radice di ρ(z). Se il metodo é consistente, una radice é 1
cioé ρ(1) = 0. questa radice é detta radice principale z1 = 1, le restanti radici
z2 , . . . , zk sono radici spurie che sorgono perché si rappresenta una equazione
differenziale del primo ordine con una equazione alle differenze di ordine k. Il
metodo deve essere tale da assicurare che le radici spurie tendano a zero per
h → 0, dunque la zero-stabilitá é assicurata dalla condizione delle radici:
• nelle ipotesi di continuitá della ϕ si ha che
zero − stabilità ⇔ condizione delle radici
• (teorema di Lax-Richtmayer)
convergenza ⇔ consistenza + stabilità
La zero-stabilitá non é la sola forma di stabilitá di una soluzione numerica.
10/05/2011
20
Di solito il termine
• condizionamento si riferisce alla sensibilitá della soluzione di un problema a perturbazione dei dati;
• stabilitá si riferisce alla sensibilitá di un algoritmo alle perturbazioni
(errori) che sorgono durante i calcoli.
Nello studio delle equazioni differenziali questi due significati tendono a
sovrapporsi esiste ambiguitá nella terminologia perché spesso si parla in
entrambi i casi di stabilitá.
Un metodo a un passo (k=1) soddisfa necessariamente la condizione della
radice perché la sola radice di ρ(z) é z = 1. Quindi si ha che
convergenza ⇔ stabilità
per avere la convergenza occorre che sia zero-stabile che corrisponde alla ben
posizione dell’equazione alle differenze.
La ben posizione dice che si ha dipendenza continua della soluzione
dell’equazione alle differenze dalle perturbazioni sui dati. Dice cioé che per h
piccolo, l’equazione alle differenze ha lo stesso comportamento dell’equazione
differenziale rispetto alle perturbazioni. Quindi intuitivamente se, per h → 0,
si ha che
• l’equazione alle differenze approssima bene l’equazione differenziale
• la soluzione dell’equazione alle differenze ha la stessa stabilitá della
soluzione dell’equazione differenziale
allora la soluzione dell’equazione alle differenze converge alla soluzione
dell’equazione differenziale in un punto t, per ogni t.
10/05/2011
21
Metodi a un passo
La definizione generale di un metodo ad un passo é la seguente
(
un+1 = un + hF (tn , un ; h) n = 0, 1, . . . , N − 1
u0 = y0
(15)
ove F é determinata da f ed é funzione di tn , un e h.
Il Metodo di Eulero
é il piú semplice di tutti i metodi numerici ed é definito come segue
(
un+1 = un + hf (tn , un ) n = 0, 1, . . . , N − 1
.
u0 = y 0
(16)
ed é suggerito dalla formula di derivazione numerica
f (x, y(xi )) = y 0 (xi ),
y 0 (xi ) ∼
y(xi + 1) − y(xi )
h
da cui si ricava
y(xi+1 ) − y(xi )
= f (xi , y(xi ))
h
Derivazione Geometrica
Nel punto t0 é noto il valore y0 della soluzione analitica. Per calcolare
y(t0 + h) occorre muoversi lungo la curva integrale passante per (t0 , y0 ). Di
tale punto é nota la pendenza nel punto (t0 , y0 ) poiché vale y00 = f (t0 , y0 ). Se
h é sufficientemente piccolo invece di spostarsi lungo la curva integrale ci si
sposta lungo la sua tangente e si considera come approssimazione di y(t0 + h)
il valore
y(t0 + h) ' y0 + hf (t0 , y0 ) = y1
Tale punto non appartiene piú alla curva integrale y(x), soluzione del problema
di Cauchy, ma a una nuova curva integrale. Se il problema é ben condizionato,
le due curve integrali sono molto vicine e si puó pensare di approssimare y(x)
con la nuova curva integrale, si prosegue poi determinando in modo analogo a
prima
y2 = y1 + hf (t1 , y1 ) ' y(t1 + h) . . .
Ad ogni passo si commette un errore (errore locale di troncamento) dato dalla
distanza tra il valore calcolato un+1 e il valore che si otterrebbe seguendo
la curva integrale che passa per (tn , yn ) e dopo un certo numero di passi
tali errori si accumulano dando luogo ad un errore globale che dipende anche dal condizionamento del problema di Cauchy nell’intervallo scelto. Tale
errore deve anche tener conto degli errori di arrotondamento nelle operazioni aritmetiche se il metodo é implementato in aritmetica finita. Pertanto il metodo di Eulero costruisce nel campo direzionale associato al
problema di Cauchy, una poligonale in cui ogni segmento ha la direzione
10/05/2011
22
della tangente alla curva integrale che passa per l’origine del segmento.
50
100
150
200
250
300
350
400
450
500
100
200
300
400
500
600
Il metodo di Eulero si puó anche pensare come derivazione da una formula
di quadratura, dalla relazione
y(x) = y(xi ) +
Z x
xi
y 0 (τ )dτ = y(xi ) +
Z x
xi
f (τ, y(τ ))dτ
usando la formula dei rettangoli si ottiene
y(xi+1 ) ∼ y(xi ) + hf (xi , y(xi ))
In generale un metodo ad un passo é di ordine p se l’errore locale di troncamento é un infinitesimo di ordine p + 1 rispetto ad h, cioé
τ (t, y, h) = O(hp+1 )
Un metodo a un passo é consistente se é almeno del primo ordine, infatti
τn+1 = τ (tn , yn , h) = y(tn + h) − y(tn ) − hF (tn , yn ; h)
2
= y(tn ) + hy 0 (tn ) + h2 y”(tn + θh) − y(tn ) − hF (tn , yn ; h)
= h(f (t, y) − F (t, y; h)) + O(h2 )
Per cui il metodo di Eulero é consistente, infatti f (t, y; h) = f (t, y) = F (t, y, 0)
e quindi l’errore locale di troncamento
τ (t, y; h) =
h2
y”(x + θh) 0 < θ < 1
2
10/05/2011
23
Analisi di Convergenza
Un metodo si dice convergente se
∀ n = 0, . . . , Nh ,
|un − yn | ≤ C(h)
ove C(h) é un infinitesimo rispetto ad h per h → 0. Se C(h) = O(hp ) per
qualche p > 0 diremo che il metodo converge con ordine p. Per verificare che il
metodo di Eulero in avanti é convergente scriviamo l’errore nel modo seguente:
en = yn − un = (yn − u∗n ) + (u∗n − un ),
(17)
dove
u∗n = yn−1 + hf (tn−1 , yn−1 ),
vale a dire che u∗n é la soluzione numerica calcolata in tn a partire dalla
soluzione esatta al tempo tn−1 . Il termine yn −u∗n della (17) rappresenta l’errore
prodotto da un passo del metodo di Eulero in avanti, mentre il termine u∗n − un
rappresenta la propagazione dell’errore accumulato al livello temporale precedente. La figura rappresenta geometricamente un passo del metodo di Eulero
in avanti.
un
en
u*
n
hτ n
un−1
y
n
yn−1
y=y(t)
t n−1
tn
t
Poiché l’errore globale risulta essere la somma dell’errore di troncamento
dell’ultimo passo e della propagazione degli errori di troncamento nei passi
precedenti, il metodo risulta convergente se entrambi tendono a zero per h che
tende a zero.
yn − u∗n
yn − u∗n = hτn , τn =
h
é detto errore locale di troncamento. Dalla definizione di u∗n e supponendo che
y sia derivabile due volte si ha
yn −
u∗n
h2
= y”(ξn ),
2
per un opportuno ξn ∈ (tn−1 , tn ).
(18)
10/05/2011
24
L’errore di troncamento é definito:
τ (h) =
max |τn (h)|.
n=0,...,N h
Occorre notare che queste formule valgono per qualsiasi metodo numerico a
un passo. Per il metodo di Eulero in avanti si deduce dalla (18) che l’errore di
troncamento diventa:
τ (h) =
Mh
,
2
ove,
M = max∗ |y”(t)| = maxt∈[t0 ,t∗ ] |f 0 (t, y(t))|.
t∈[t0 ,t ]
Si deduce che limh→0 τn = 0. Un metodo per il quale l’errore di troncamento
locale tende a zero per h che tende a zero si dice consistente. Diremo inoltre
che é consistente con ordine p se τ (h) = O(hp ) per un opportuno p ≥ 1.
Per il secondo addendo della (17) abbiamo
u∗n − un = en−1 + h[f (tn−1 , yn−1 ) − f (tn−1 , un−1 )]
poiché f é lipschitziana rispetto al suo secondo argomento, si trova
|u∗n − un | ≤ (1 + hL)|en−1 |.
Se l’errore iniziale é nullo cioé e0 = 0 la relazione precedente diventa
|en | ≤ |un − u∗n | + |u∗n − yn | ≤ (1 + hL)|en−1 | + h|τn (h)| ≤
[1+(1+hL)+. . .+(1+hL)n−1 ]hτ (h) =
(1 + hL)n − 1
eL(tn −t0 ) − 1
τ (h) ≤
τ (h)
L
L
avendo usato la relazione
n−1
X
(1 + hL)k = [(1 + hL)n − 1]/(hL)
k=0
la disuguaglianza 1 + hL ≤ ehL , ed avendo infine osservato che nh = tn − t0 .
Si trova quindi
|en | ≤
(eL(tn −t0 ) − 1) M
( )h,
L
2
∀n = 0, . . . , Nh ,
(19)
da cui discende che il metodo di Eulero é convergente con ordine pari a 1.
L’ordine del metodo é uguale all’ordine dell’errore di troncamento locale.
La consistenza é necessaria per poter avere la convergenza. Se non fosse soddisfatta, il metodo ad ogni passo introdurrebbe un errore non infinitesimo con
h, che sommandosi con gli errori pregressi pregiudicherebbe in modo irrimediabile la possibilitá che l’errore globale tenda a zero con h che tende a zero.
La proprietá che un − u∗n si mantenga limitato per h che tende a zero é la
proprietá chiamata zero stabilitá.
La zero stabilitá unita alla consistenza implica la convergenza.
D’altra parte il polinomio caratteristico associato all’eq. alle differenze del
metodo di Eulero risulta essere ρ(z) = z − 1 e z = 1 é la radice principale
quindi il metodo soddisfa la condizione della radice.
10/05/2011
25
Esempio Consideriamo il seguente problema con valore iniziale
u0 = −u + sin(t),
u(0) = 1.
Sappiamo che la soluzione esatta u(t) = 32 e−t + 12 (sin(t) − cos(t)) che si trova
applicando uno dei metodi che avete studiato in analisi matematica. Se invece
applichiamo il metodo di Eulero considerando h = 41 otteniamo i seguenti
risultati:
• h = 14 , per cui t1 =
1
4
e u0 = 1, allora
1
3
u1 = u0 + hf (t0 , u0 ) = 1 + (−1 + sin(0)) = .
4
4
Allora u(1/4) ≈ 0.75 e l’errore in questa approssimazione é
e1 = u(1/4) − u1 = .8074469434 − .75 = .05744...
• t2 = 2h = 1/2 e u1 = 3/4 dal passo precedente. Allora
u2 = u1 + hf (t1 , u1 ) =
3 1 3
1
+ (− + sin( ) = 0.6243509898
4 4 4
4
quindi u(1/2) ≈ 0.62435... e l’errore in questa approssimazione é
e2 = u(1/2) − u2 = .7107174779 − .6243509898 = .0863664881
Metodo di eulero in avanti
Metodo di eulero in avanti
1
1
0.9
0.9
0.8
0.8
0.7
0.7
0.6
0.5
0
0.5
nodi 4errore 0.090904
Metodo di eulero in avanti
1
1
1
0.9
0.9
0.8
0.8
0.7
0.7
0
0.5
nodi 16errore 0.020562
1
0
0.5
nodi 8errore 0.042461
Metodo di eulero in avanti
1
0
0.5
nodi 32errore 0.010122
1
10/05/2011
26
Se nell’approssimare la derivata usiamo le formule alle differenze finite
all’indietro resta definito il metodo di Eulero implicito
(
un+1 = un + hf (tn+1 , un+1 ) n = 0, . . . , Nh − 1,
u0 = y0
La soluzione numerica un+1 al tempo tn+1 richiede, per essere calcolata,
informazioni su f (tn+1 , un+1 ) quindi anche da se stessa. Per questo motivo il
precedente metodo di Eulero è detto esplicito, questo è detto implicito. Un
metodo implicito generalmente è più costoso perchè richiede per il calcolo di
un+1 la risoluzione di un problema non lineare, se f è non lineare rispetto al
secondo argomento.
Nel problema presentato dello sviluppo di una sola popolazione batterica,
l’equazione
dy
y
= Cy(1 − ),
dt
B
viene discretizzata con il metodo di Eulero esplicito
un+1 = un + hCun (1 −
un
)
B
mentre il metodo implicito richiede la soluzione della seguente equazione non
lineare in un+1
un+1
un+1 = un + hCun+1 (1 −
)
B
I metodi impliciti però godono di migliori proprietà di stabilità.
Eulero implicito
Eulero implicito
1
1
0.9
0.9
0.8
0.8
0.7
0.7
0
0.5
nodi 4errore 0.071254
Eulero implicito
1
1
1
0.9
0.9
0.8
0.8
0.7
0.7
0
0.5
nodi 16errore 0.019356
1
0
0.5
nodi 8errore 0.037619
Eulero implicito
1
0
0.5
nodi 32errore 0.0098211
1
I grafici sin qui riportati sono stati ottenuti utilizzando le seguenti functions:
10/05/2011
function [t,u]=f_eulero(f,tspan,y0,Nh)
% Eulero in avanti
% [t,u]=f_eulero(f,tspan,y0,Nh)
% tspan=[t0,tf]
% Nh nodi
h=(tspan(2)-tspan(1))/Nh; tt=[tspan(1):h:tspan(2)]
y=y0(:); % valore iniziale
w=y; u=y.’;
for t=tt(1:end-1)
w=w+h*feval(f,t,w,varargin{:});
u=[u;w.’];
end
t=tt;
return
%---------------------------function [t,u]=b_eulero(odefun,tspan,y0,Nh)
% risolve ODE con Eulero implicito
% [t,u]=b_eulero(odefun,tspan,y0,Nh)
% tspan=[t0,tf]; y0 condizione iniziale
% odefun: deve ritornare un vettore contenente
% f(t,y)
tt=linspace(tspan(1),tspan(2),Nh+1); y=y0(:); u=y.’;
global glob_h glob_t glob_y glob_odefun;
glob_h=(tspan(2)-tspan(1))/Nh; glob_y=y; glob_odefun=odefun;
glob_t=tt(2); options=optimset; options.Display=’off’;
options.TolFun=1.e-12; options.MaxFunEvals=10000;
for glob_t=tt(2:end)
w=fsolve(@(w) beulerfun(w),glob_y,options);
u=[u;w.’];
glob_y=w;
end
t=tt;
clear glob_h glob_t glob_y glob_odefun
end
%------------------------function [z]=beulerfun(w)
% function secondaria inclusa nel file b_eulero
global glob_h glob_t glob_y glob_odefun;
z=w-glob_y-glob_h*feval(glob_odefun,glob_t,w);
end
27
10/05/2011
28
Metodo di Crank-Nicolson
Sommando membro a membro il generico passo dei metodi di Eulero esplicito
e Eulero implicito si ottiene il metodo di Crank-Nicolson nel quale
h
un+1 = un + [fn + fn+1 ]
2
Questo metodo é consistente e si dimostra che l’errore di troncamento locale
tende a zero come h2 , e quindi il metodo é convergente con ordine di convergenza 2.
Esercizio Prendendo spunto dalle function scritte in precedenza costruite una
function che implementa il metodo di Crank-Nicolson. Considerate il seguente
problema di Cauchy
(
y 0 (t) = cos(2y(t)), t ∈ (0, 1]
y(0) = 0,
4t
−1)
(La soluzione esatta é y(t) = 1/2arcsin( (e
)) confrontate questo metodo
(e4t +1)
con i metodi di Eulero visti in precedenza.
10/05/2011
29
Supponiamo ad esempio che il metodo numerico sia del tipo multistep lineare cioé possa essere scritto nella seguente forma generale:
un+1 =
p
X
aj un−j + h
j=0
p
X
bj fn−j + hb−1 fn+1 ,
n = p, p + 1, . . .
(20)
j=0
per opportuni coefficienti {ak } e {bk } per p > 0. Il polinomio
π(r) = rp+1 −
p
X
aj rp−j
j=0
é detto primo polinomio caratteristico associato al metodo numerico, mentre
σ(r) = b−1 rp+1 +
p
X
bj rp−j
j=0
é detto secondo polinomio caratteristico. Allora il seguente
p(r) = π(r) − λhσ(r),
é detto polinomio caratteristico del metodo.
Siano rj ,
j = 0, . . . , p le radici del polinomio π(r).
Il metodo (20) é zero-stabile se e solo se valgono le seguenti condizioni sulle
radici di π(r):
(
|rj | ≤ 1
∀j = 0, . . . , p
(21)
0
π (rj ) 6= 0 ∀j tale che |rj | = 1
Nel metodo di Eulero in avavnti p = 0, a0 = 1, b−1 = 0, b0 = 1. Nel metodo
di Eulero all’indietro p = 0, a0 = 1, b−1 = 1, b0 = 0, e per il metodo di CrankNicolson p = 0, a0 = 1, b−1 = 1/2, b0 = 1/2. In tutti questi casi c’é una sola
radice di π(r) che vale 1 e di conseguenza tutti questi metodi sono zero-stabili.
Vale inoltre il seguente
Teorema di equivalenza di Lax-Ritchmyer: Ogni metodo consistente é
convergente se e solo se é zero-stabile. L’errore di troncamento locale per un
metodo multistep (20) é definito come


p
p


X
X
1
yn+1 −
aj yn−j − h
bj f (tn−j , yn−j ) − hb−1 f (tn+1 , yn+1 ) .
τn =

h
j=0
j=0
Il metodo é detto consistente se τ (h) = max|τn (h)| tende a zero per h che
tende a zero. Si puó dimostrare che questa condizione equivale a richiedere
che
p
p
p
X
j=0
aj = 1,
X
j=−1
bj −
X
jaj = 1
j=0
corrisponde ad affermare che r = 1 é una radice del polinomio π(r).
10/05/2011
30
Fino ad ora ci siamo occupati di problemi di Cauchy su intervalli limitati
in cui il numero di sottointervalli Nh dipende da h e tende all’infinito solo se
h → 0. Ma esistono svariate situazioni in cui occorre trovare la soluzione del
problema di Cauchy in intervalli di tempo grandi, (virtualmente infiniti). In
questo caso anche per h fissato Nh puó tendere all’infinito e le limitazioni di en
ottenute nella (19) possono perdere di significato in quanto a secondo membro
compaiono quantitá illimitate. Si cerca quindi di caratterizzare metodi che
pur in corrispondenza di h grandi siano accurati anche per t → ∞. Sfortunatamente il metodo di Eulero in avanti non gode di questa proprietá. Se
consideriamo il seguente problema
(
y 0 (t) = λy(t) , t ∈ (0, ∞),
.
y(0) = 1
(22)
dove λ é un numero reale negativo. La soluzione esatta y(t) = eλt tende a zero
per t → ∞, mentre il metodo di Eulero in avanti
u0 = 1,
un+1 = un (1 + λh) = (1 + λh)n+1 ,
n ≥ 0.
Avremo limn→∞ un = 0 se e solo se
−1 < 1 + hλ < 1,
ovvero h <
2
.
|λ|
(23)
Questa condizione esprime la richiesta che per un h fissato la soluzione numerica riproduca l’andamento della soluzione esatta quando tn tende all’infinito.
2
Se h > |λ|
allora un+1 → ∞ per n che tende all’infinito. La condizione (23) é
una condizione di stabilitá, anzi la proprietá che
lim un = 0
n→∞
é detta di assoluta stabilitá.
Nell’esempio seguente consideriamo λ = −1 allora occorre scegliere h < 2 in
figura sono riportati i risultati ottenuti per h = 30
, 30 , 30 , 30 .
12 14 16 18
10/05/2011
31
eulero in avanti)
eulero in avanti)
150
10
100
5
50
0
0
−5
−50
−100
0
10
20
passo 2.5
eulero in avanti)
30
−10
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
0
10
20
passo 1.875
30
−1
0
10
20
passo 2.1429
eulero in avanti)
30
0
10
20
passo 1.6667
30
Eulero implicito
Eulero implicito
1
1
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
0
10
20
30
nodi 15errore 6.9692e−008
Eulero implicito
0
1
1
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
0
10
20
30
nodi 60errore 2.7104e−011
0
0
10
20
30
nodi 30errore 9.3123e−010
Eulero implicito
0
10
20
30
nodi 120errore 2.8421e−012
10/05/2011
32
Contrariamente il metodo di Eulero all’indietro e di Crank-Nicolson non
richiedono limitazioni su h per³ garantire
l’assoluta stabilitá , infatti si trova:
´n+1
1
un+1 = un + hλun+1 e un+1 = 1−λh
, n ≥ 0, che tende a zero per n → ∞
per tutti i valori h > 0, analogamente applicando Crank-Nicolson si trova
"
un+1
(1 +
=
(1 −
#n+1
hλ
)
2
λh
)
2
,
n≥0
che per λ < 0 tende a zero per n → ∞ per tutti i possibili valori di h > 0.
Possiamo quindi affermare che il Metodo di Eulero in avanti é condizionatamente assolutamente stabile mentre Eulero all’indietro e Crank-Nicolson sono
incondizionatamente assolutamente stabili.
La regione di Assoluta Stabilitá
Supponiamo che nel problema (22) λ sia un numero complesso con parte
reale negativa. In tal caso la soluzione eλt tende ancora a zero quando t → ∞.
Chiamiamo regione di assoluta stabilitá A di un metodo numerico l’insieme
dei valori del piano complesso z = hλ in corrispondenza dei quali il metodo é
assolutamente stabile. Per esempio per il metodo di Eulero in avanti la regione
di assoluta stabilitá é costituita dai valori z = hλ ∈ C tali che |1+λh| < 1, cioé
dal cerchio di raggio unitario e centro (−1, 0), da cui risolvendo rispetto ad h
si ottiene h < −2Re(λ)
. Per il metodo di Eulero all’indietro l’assoluta stabilitá é
|λ|2
invece soddisfatta per ogni valore di hλ al di fuori del cerchio di raggio unitario
di centro (1, 0) del piano complesso. Metodi che risultano incondizionatamente
assolutamente stabili si dicono A − stabili. Il metodi di Eulero all’indietro e di
Crank-Nicolson sono dunque A − stabili cosı́ come molti altri metodi impliciti,
questa proprietá rende i metodi impliciti interessanti benché richiedano costi
computazionali decisamente piú elevati dei metodi espliciti.
Esempio Calcoliamo la restrizione a cui deve essere soggetta h qualora si
utilizzi Eulero in avanti per la risoluzione del problem di Cauchy y 0 (t) = λy(t)
con λ = −1 + i. Questo valore di λ appartiene alla frontiera della regione di
assoluta stabilitá. Un qualunque h ∈ (0, 1) sará sufficiente ad assicurare che
hλ ∈ A. Se fosse λ = −2 + 2i la disuguaglianza |1 + λh| < 1 comporterebbe
una restrizione piú severa h ∈ (0, 1/2).
Nel caso si consideri un problema generalizzato del tipo
(
y 0 (t) = λ(t)y(t) + r(t) , t ∈ (0∞),
.
y(0) = 1
(24)
dove λ e r sono due funzioni continue e −λmax ≤ λ(t) ≤ −λmin con 0 <
λmin < λmax < +∞, la soluzione esatta non tende necessariamente a zero
quando t tende all’infinito, per cui non pare sensato chiedere che un metodo
numerico sia assolutamente stabile in questo caso. Si puó peró dimostrare che
un metodo assolutamente stabile per il problema (22) , quando viene applicato
a un problema del tipo (24) garantisce che le eventuali perturbazioni restino
sotto controllo quando t tende all’infinito, accettando al piú una opportuna
limitazione sul passo h.
10/05/2011
33
Metodi Runge-Kutta e Metodi Multistep
Per ottenere metodi di ordine superiore a 1 si potrebbe considerare lo sviluppo
in serie di Taylor ai primi p termini. Per esempio se p=2 si ha che
h
F (um , tm ; h; f ) = f (tm , ym ) + (ft (tm , ym ) + fy (tm , ym ))
2
ma questo procedimento é molto costoso. Nei metodi Runge-Kutta la funzione
F (tm , um ; h) é determinata calcolando numericamente l’integrale
Z tm +1
tm
f (t, y(t)dt = y(tm+1 ) − y(tm ).
Considerando una partizione numerica tm ≤ τ1 < τ2 < . . . < τq ≤ tm+1
di [tm , tm+1 ] questo integrale puó essere approssimato con la formula di
quadratura numerica
h
q
X
cj f (τj , y(τj )) con y(τj ) = vj = vm + h
j=1
j−1
X
bj` f (τj , v` )
`=1
Nell’integrando appare la funzione y(t) che deve essere assegnata nei nodi τj .
Poiché si vuole che la formula di quadratura sia esatta almeno per polinomi di
grado 0 si ha che
h
q
X
cj = tm+1 − tm
j=1
P
e poiché h = tm+1 − tm allora si ottiene la condizione qj=1 cj = 1. Inoltre si
P
vuole che la formula di quadratura h j−1
`=1 bj,` f (τj , v` ) sia esatta almeno per
polinomi di grado zero, per cui
h
j−1
X
bj,` = τj − tm
`=1
e poiché τj = tm + aj h con j = 1, . . . , q allora
h
j−1
X
`=1
bj,` = aj h,
pertanto
j−1
X
bj,` = aj
`=1
Come si puó osservare questa classe di metodi é caratterizzati dal fatto che,
nella definizione del metodo, tra due punti successivi tm e tm+1 vengono usati
dei punti ausiliari (stages o stadi) nei quali viene calcolata la funzione f (t, y).
Ad esempio nel caso di un solo punto ausiliario (metodo di Heun), si pone
h
h
un+1 = un + hf (tn + , un + fn ).
2
2
Si é quindi introdotto il punto ausiliario t∗ = tn + h2 . Si calcola y ∗ = yn + h2 fn e si
considera questo valore come approssimazione di y(t∗ ). Si calcola poi f (t∗ , y ∗ )
e lo si usa per ottenere yn+1 . Si puó dimostrare che questo metodo é di ordine
10/05/2011
34
due.
In generale un metodo a q stages (stadi) é definito da

P

um+1 = um + h qj=1 cj Kj




f (tm , ym )

 K1 =







Kj =
aj =
1=
P
f (tm + haj , um + h q`=0 bj,` K` )
Pj−1
b
j = 2, . . . , q
Pq`=1 j`
j=1 cj
I coefficienti {bij } , {ci } e {ai } caratterizzano completamente un metodo
Runge-Kutta (RK) e sono generalmente raggruppati nell’array di Butcher
a1
a2
..
.
b11
b21
..
.
b12
b22
..
.
...
...
..
.
b1q
b2q
..
.
aq bq1 bq2 . . . bqq
c1 c2 . . . cq
Se i coefficienti bij sono uguali a zero per j ≥ i, con i = 1, 2, . . . q, allora ciascun Ki puó essere ottenuto esplicitamente usando gli i − 1 coefficienti
K1 , . . . , Ki−1 che sono giá calcolati, in tal caso il metodo RK si dice esplicito,
in caso contrario il metodo si dice implicito e per calcolare i coefficienti Ki si
deve risolvere un sistema non lineare di dimensione q.
Uno tra i piú noti metodi RK assume la forma:
h
un+1 = un + (K1 + 2K2 + 2K3 + K4 )
6
dove
K1
K2
K3
K4
= fn ,
= f (tn + h2 , un + h2 K1 ),
= f (tn + h2 , un + h2 K2 ),
= f (tn+1 , un + hK3 ),
(25)
0
1
2
1
2
1
1
2
1
2
0
0
0
1
1
6
1
3
1
3
1
6
Questo schema si puó ricavare usando la formula di quadratura di Simpson per
approssimare l’integrale fra tn e tn+1 , é un metodo esplicito di ordine 4 rispetto
a h che richiede ad ogni passo 4 nuove valutazioni della f . Naturalmente si
possono costruire molti altri metodi RK sia espliciti che impliciti di ordine
arbitrario. Un metodo RK implicito di ordine 4 a due stadi é definito dal
seguente array di Butcher
√
3− 3
6√
3+ 3
6
1
4 √
3+2 3
12
1
2
√
3−2 3
12
1
4
1
2
In MatLab esiste la function ode45 basata sulla coppia di metodi RK espliciti (coppia di Dormand-Prince) di ordine 4 e 5, mentre ode23 implementa
la coppia Bogacki-Shampine. In questi metodi il passo di integrazione varia
10/05/2011
35
in modo da garantire che l’errore si mantenga al di sotto di una tolleranza fissata RelTol pari a 10−3 . Il programma ode23tb implementa invece un metodo
Runge-Kutta implicito.
I metodi Multistep o multipasso consentono di ottenere un ordine di
accuratezza elevato coinvolgendo i diversi valori un , un−1 , . . . , un−p , p ≥ 1
nella determinazione di un+1 .
Un esempio é il metodo del terz’ordine di Adams-Bashforth (AB3)
un+1 = un +
h
(23fn − 16fn−1 + 5fn−2 )
12
questa formula é ottenuta da:
yn+1 = yn +
Z tn+1
tn
f (t, y(t))dt
sostituendo f con il polinomio interpolatore di grado 2 nei nodi tn−2 , tn−1 , tn .
Se invece si sostituisce f con il polinomio interpolatore di grado 3 nei nodi
tn−2 , tn−1 , tn , tn+1 si ottiene la formula di Adams-Multon (AM 4):
un+1 = un +
h
(9fn+1 + 19fn − 5fn−1 + fn−2 )
24
si dimostra che tutti questi metodi sono consistenti e zero-stabili. Un’altra
famiglia di metodi multistep si ottiene approssimando le derivate con rapporto
incrementale all’indietro di ordine elevato backward difference formula (BDF”)
a due passi implicito
4
1
2h
un+1 = un − un−1 + fn+1
3
3
3
o quella a tre passi (BDF3)
un+1 =
18
9
2
6h
un − un−1 + un−2 + fn+1
11
11
11
11
anche questi risultano consistenti e zero-stabili.
10/05/2011
36
I metodi Predictor-Corrector I metodi impliciti ad ogni passo generano
un problema non lineare nell’incognita un+1 . Per risolverlo si puó ricorrere
a uno dei metodi usati per il calcolo degli zeri di una funzione non lineare o
utilizzare la functio fzero di Matlab. Una alternativa consiste nell’eseguire una
iterazione di punto fisso ad ogni passo temporale. Ad esempio per il metodo
di Crank-Nicolson per k = 0, 1, . . . fino a convergenza si calcola
(k+1)
un+1 = un +
i
hh
(k)
fn + f (tn+1 , un+1 ) .
2
(0)
Si puó dimostrare che se il dato iniziale un+1 viene scelto opportunamente,
basta una sola iterazione di punto fisso per ottenere una soluzione numerica
(1)
un+1 la cui accuratezza sia dello stesso ordine della soluzione un+1 calcolata col
metodo implicito originale. Piú precisamente, se il metodo implicito ha ordine
(0)
p ≥ 2 il dato iniziale un+1 dovrá essere generato da un metodo esplicito per
lo meno accurato di ordine p − 1. Se ad esempio si usa il metodo di CrankNicolson e lo si inizializza con il metodo (del primo ordine) di Eulero in avanti,
si ottiene il Metodo di Heun
u∗n+1 = un + hfn ,
un+1 = un +
i
hh
fn + f (tn+1 , u∗n+1 )
2
Il metodo esplicito viene detto predictor, mentre l’implicito corrector. Un altro
esempio é il metodo (AB3) usato come predictor e (AM 4) usato come corrector. Essi garantiscono l’ordine di accuratezza del metodo corrector, d’altra
parte essendo espliciti introducono una restrizioni sul passo di integrazione
per garantire la stabilitá. Non sono generalmente adeguati per la risoluzione
di problemi di Cauchy su intervalli illimitati.
10/05/2011
37
Sistemi di Equazioni Differenziali
Consideriamo il seguente sistema di equazioni differenziali del primo ordine
nelle incognite y1 = y1 (t), . . . , ym = ym (t):


y 0 (t)

 1
= f1 (t, y1 , y2 , . . . , ym )
..
 .

 y 0 (t) = f (t, y , y , . . . , y )
m
1 2
m
m
(26)
dove t ∈ [t0 , t∗ ] con condizioni iniziali
y1 (t0 ) = y0 , . . . , ym (t0 ) = ym
Per risolverlo possiamo applicare uno dei metodi visti a ciascuna delle equazioni
che compongono il sistema, per esempio Eulero in avanti diventa:


u
(t)

 n+1,1
= un,1 + hf1 (t, un,1 , . . . , un,m )
..
 .

 u
n+1,m (t) = un,m + hfm (t, un,1 , . . . , un,m )
(27)
Scrivendo il sistema in forma vettoriale y 0 (t) = F (t, y(t)) l’estensione dei
metodi precedentemente sviluppati appare immediata. Per esempio, il metodo
un+1 = un + h(θF (tn+1 , un+1 ) + (1 − θ)F (tn , un )),
n ≥ 0,
con u0 = y0 , 0 ≤ θ ≤ 1, rappresenta la forma vettoriale del metodo di Eulero
in avanti se θ = 0, all’indietro se θ = 1 e di Crank-Nicolson se θ = 1/2
Esempio
Consideriamo il sistema di equazioni di Lokta-Volterra che descrivono due
popolazioni batteriche y1 , y2 in competizione fra loro in un ambiente limitato:
dy1
= C1 y1 (1 − b1 y1 − d2 y2 ),
dt
dy2
= −C2 y2 (1 − b2 y2 − d1 y1 ),
dt
dove C1 e C2 sono fattori di crescita (positivi) delle due popolazioni batteriche. I coefficienti d1 ed2 si riferiscono all’interazione tra le due popolazioni,
mentre b1 e b2 sono legati dall’abbondanza dei nutrienti. Consideriamo
C1 = C2 = 1, b1 = b2 = 0 e d1 = d2 = 1. Per poter utilizzare le function che
abbiamo giá riportato occorre costruire una function che precisi le componenti
di F . per il nostro problema:
function fn=sistema_locta(t,y)
C1=1; C2=1; d1=1;d2=1; b1=0; b2=0;
[n,m]=size(y); fn=zeros(n,m);
fn(1)=C1*y(1)*(1-b1*y(1)-d2*y(2));
fn(2)=-C2*y(2)*(1-b2*y(2)-d1*y(1));
return
10/05/2011
38
Soluzione del sistema di Lkta−Volterra
3
3
2.5
2.5
2
2
1.5
1.5
1
1
0.5
0.5
0
0
2
4
6
8
evoluzione del tempo delle due componenti y1 ey2
10
0
0
0.5
1
1.5
2
piano delle fasi (y1,y2)
La figura mostra la soluzione numerica del sistema. A sinistra rappresentazione in funzione del tempo dell’evoluzione delle due componenti della
soluzione y1 linea piena e y2 linea tratteggiata per due diversi valori del dato
iniziale (2,2) in blu (1.2,1.2) in rosso. A destra le corrispondenti traiettorie nel
piano delle fasi. Generalmente si considerano equazioni differenziali ordinarie
2.5
3
10/05/2011
39
del primo ordine in quanto le equazioni differenziali di ordine p > 1 possono
essere sempre ridotte ad un sistema di p equazioni del primo ordine. Infatti
y (m) (x) = f (x, y(x), y 0 (x), . . . , y (m−1) (x))
introducendo le funzioni ausiliarie:
z1 (x)
z2 (x)
..
.
= y(x)
= y 0 (x)
..
.
zm (x) = y (m−1) (x)
viene trasformato in un sistema equivalente di equazioni differenziali ordinarie
del primo ordine:



z =


0
z10
z20
..
.
0
zm






=




z2
z3
..
.






f (x, z1 , z2 , . . . , zm )
Modello di Van der Pol
L’uso dei modelli matematici per studiare l’attivitá elettrica del cuore inizia
nel 1928 quando Van der Pol propose di rappresentare il ritmo cardiaco attraverso il comportamento di un circuito elettrico contenente un elemento non
lineare, una ”triode wave” la cui resistenza dipende dalla corrente applicata.
Matematicamente il circuito é descritto dall’equazione differenziale del secondo
ordine
y1 ” − µ(1 − y12 )y10 + y1 = 0
dove µ > 0 é un parametro scalare, sostituendo y10 = y2 , si ottiene il sistema
(
y10 (x) = y2
y20 (x) = µ(1 − y12 ))y2 − y1
Caso in cui l’equazione di Van der Pol risulta stiff. Quando µ aumenta,
per esempio diventa 1000, la soluzione dell’equazione di Van der Pol cambia
in modo drammatico e mostra delle oscillazioni su una scala temporale molto
lunga e approssimare la soluzione diventa un compito difficile, si dice che il
problema diventa stiff, per cui un risolutore come ode45 costruito per problemi
non stiff diventa inefficiente. Nella libreria Matlab esistono le function ode15s,
ode23s ecc. adatte per risolvere questo tipo di problemi.
%% Esercitazione su Vand der Pol eq. caso non stiff
% y"_1-mu(1-y_1^2)y_1’+y_1
[t,y]=ode45(@vdp1,[0 20],[2 0]); subplot(2,2,1)
plot(t,y(:,1),t,y(:,2),’-.’),xlabel(’time t’)
title(’ soluzione dell’’eq. Vander Pol \mu=1’)
soluzione y
10/05/2011
40
soluzione dell’eq. Vander Pol µ=1
4
4
2
2
0
0
−2
−2
−4
0
5
10
time t
15
20
2
soluzione nel piano delle fasi
−4
−4
−2
0
2
4
2000
1
1000
0
0
−1
−1000
−2
−3
0
1000
2000
3000
prima componente y1
−2000
0
1000
2000
3000
seconda componente y2
ylabel(’soluzione y’)
subplot(2,2,2), plot(y(:,1),y(:,2)),
title(’soluzione nel piano delle fasi’)
%% Van der Pol eq. caso stiff
% usiamo la function ode15s per problemi stiff
[t,y]=ode15s(@vdp1000,[0 3000],[2 0]);
subplot(2,2,3),title(’Van der Pol stiff \mu=1000’)
plot(t,y(:,1),’-.’),xlabel(’prima componente y_1’)
subplot(2,2,4),plot(t,y(:,2),’-.’),xlabel(’seconda componente y_2’)
____________________________________________
function dypt=vdp1000(t,y)
% Van der Pol equation mu=1000
dypt=[y(2);1000*(1-y(1)^2)*y(2)-y(1)];
Software realizzato per gli esempi precedentemente proposti
10/05/2011
41
%% Esercizio sulla verifica della assoluta stabilita
% dei metodi di Eulero
% all’equazione y’(t)=\lambda y(t); y(0)=1
% nell’intervallo [0,infinito]
% costruzione della soluzione esatta
sol_esatta=inline(’exp(-t)’,’t’)
%lambda=-1;
f=inline(’-u’,’t’,’u’)
y0=1; % valore iniziale
tspan=[0,30]
t1=linspace(tspan(1),tspan(2));
yes=feval(sol_esatta,t1);
%% Prima app. h=30/12; h=30/14; ... EULERO in AVANTI
s=12;
h=(30/s); % passo
Nh=((tspan(2)-tspan(1))/h); % numero di nodi
figure
for k=1:4
[t,ufe]=f_eulero(f,tspan,y0,Nh);
b(k)=abs(ufe(end)-feval(sol_esatta,t(end)));
subplot(2,2,k),plot(t1,yes,t,ufe,’r-.’) title(’eulero in avanti)’)
xlabel([’passo ’,num2str(h),’errore ’,num2str(b(k))])
s=s+2;h=(30/s);
% passo
Nh=((tspan(2)-tspan(1))/h)
end
%% Prima app. Nh=30/12 ; h=30/14....EULERO ALL’INDIETRO
s=12; h=(30/s)
Nh=((tspan(2)-tspan(1))/h); % numero di nodi
y0=1; figure
for k=1:4
[t,ube]=b_eulero(f,tspan,y0,Nh);
b(k)=abs(ube(end)-feval(sol_esatta,t(end)));
subplot(2,2,k),plot(t1,yes,t,ube,’r-’)
title(’Eulero implicito’)
xlabel([’nodi ’,num2str(Nh),’errore ’,num2str(b(k))])
s=s+2;h=(30/s);
% passo
Nh=((tspan(2)-tspan(1))/h)
end
____________________________________________________
function [t,u]=f_eulero(f,tspan,y0,Nh,varargin)
% Eulero in avanti
10/05/2011
42
% [t,u]=f_eulero(f,tspan,y0,Nh)
h=(tspan(2)-tspan(1))/Nh;
tt=[tspan(1):h:tspan(2)];
y=y0(:); % valore iniziale
w=y; u=y.’;
for t=tt(1:end-1)
w=w+h*feval(f,t,w,varargin{:});
u=[u;w.’];
end
t=tt;
return
____________________________________________________
function [t,u]=b_eulero(odefun,tspan,y0,Nh,varargin)
% risolve ODE con Eulero implicito
% [t,u]=b_eulero(odefun,tspan,y0,Nh)
% tspan=[t0,tf]; y0 condizione iniziale
% odefun: deve ritornare un vettore contenente
% f(t,y)
tt=linspace(tspan(1),tspan(2),Nh+1); y=y0(:); u=y.’; global glob_h
glob_t glob_y glob_odefun;
glob_h=(tspan(2)-tspan(1))/Nh; glob_y=y;
glob_odefun=odefun;
glob_t=tt(2);
options=optimset;options.Display=’off’; options.TolFun=1.e-12;
options.MaxFunEvals=10000;
for glob_t=tt(2:end)
w=fsolve(@(w) beulerfun(w),glob_y,options);
u=[u;w.’];
glob_y=w;
end
t=tt;
clear glob_h glob_t glob_y glob_odefun end
function [z]=beulerfun(w) global glob_h glob_t glob_y glob_odefun;
z=w-glob_y-glob_h*feval(glob_odefun,glob_t,w);
end
___________________________________________
%% risoluzione del sistema di eq. diff.
% sistema Lotka Volterra
[t,u]=f_eulero(’sistema_locta’,[0,10],[2,2],2000);
figure(1),plot(t,u(:,1),t,u(:,2),’-.’) hold on
[t1,u1]=f_eulero(’sistema_locta’,[0,10],[1.2,1.2],2000);
plot(t1,u1(:,1),’r’,t1,u1(:,2),’r-.’)
10/05/2011
xlabel(’evoluzione del tempo delle due componenti y_1 ey_2’)
title(’Soluzione del sistema di Lokta-Volterra’)
figure,plot(u(:,1),u(:,2))
hold on,plot(u1(:,1),u1(:,2),’r-.’)
xlabel(’piano delle fasi (y1,y2)’)
_____________________________
function fn=sistema_locta(t,y)
C1=1; C2=1; d1=1;d2=1; b1=0; b2=0;
[n,m]=size(y); fn=zeros(n,m);
fn(1)=C1*y(1)*(1-b1*y(1)-d2*y(2));
fn(2)=-C2*y(2)*(1-b2*y(2)-d1*y(1)); return
43