Le equazioni che hanno come incognite funzioni che compaiono sotto operazioni di derivata prendono il nome di equazioni differenziali. In questa Nota considereremo solo equazioni differenziali a derivate ordinarie. Se un’equazione differenziale ha soluzioni esse sono infinite. Per fissarne una è necessario imporre ulteriori condizioni che sono dettate dal particolare problema in esame. In questa Nota affronteremo il problema della soluzione numerica di equazioni differenziali con condizioni iniziali, il cosiddetto problema di Cauchy.
Il problema che considereremo in questa Nota è il seguente. Calcolare la funzione u= u t
( )
definita in t!" 0,tf#$ tale chedu
dt = f u;t
( )
!du1
dt = f1
(
u1,u2,...,un;t)
du2
dt = f2
(
u1,u2,...,un;t)
...
dun
dt = fn
(
u1,u2,...,un;t)
"
#
$$
$$
%
$$
$$
(6.1)
con
u t
(
= t0)
= u( )0 !u1
(
t = t0)
= u1( )0u2
(
t = t0)
= u2( )0
...
un
(
t = t0)
= un( )0,!
"
##
$
##
(6.2)
dove u!"n, f :!n+1" !n è una funzione assegnata, continua e a un solo valore, e u( )0 è il valore iniziale di u . Il problema (6.1)-(6.2) è un sistema di equazioni differenziali del primo ordine, a derivate ordinarie, in forma normale1 con condizioni iniziali.
1 Un’equazione differenziale si dice che è in forma normale se la derivata della funzione incognita è espressa in forma esplicita in termini della stessa funzione incognita. Un esempio di equazione differenziale in forma non normale è G(!u,u;t)= 0 (!u indica la derivata prima di u rispetto al tempo).
Nella prima parte di questa Nota considereremo il problema della soluzione di una equazione differenziale ordinaria del primo ordine; in seguito estenderemo i risultati ai sistemi di equazioni differenziali del primo ordine.
3.1 Equazioni differenziali del primo ordine
Ora ci occuperemo della risoluzione numerica di un’equazione differenziale del primo ordine con condizione iniziale assegnata. Bisogna calcolare la funzione u= u t
( )
pert0 < t ! tf tale che
du
dt = f u;t
( )
u t
(
= t0)
= u0!
"
#
$#
(6.3)
dove f = f u;t
( )
è una funzione assegnata, continua e ad un solo valore, e u0 è il valore di u all’istante (iniziale) t0.Esempio 3.1
Si consideri il circuito non lineare illustrato in Figura 6.1. L’equazione caratteristica del resistore non lineare è
iN = g v
( )
(6.4)dove g= g v
( )
è una funzione nota, dipendente solo dalla natura fisica del resistore, che assumiamo continua e ad un solo valore. Espressioni approssimate di g per il diodo a giunzione pn e per il diodo tunnel sono date nella Nota 1. L’equazione caratteristica della serie generatore di tensione-resistore lineare èi= e t
( )
! vR . (6.5)
Figura 6.1 Un esempio di circuito non lineare.
L’equazione caratteristica del condensatore è iC = Cdv
dt . (6.6)
Infine, applicando la legge di Kirchhoff per le correnti si ha
i! iN ! iC = 0 . (6.7)
A queste equazioni bisogna aggiungere l’informazione sul valore della tensione del condensatore ad un istante assegnato, che indichiamo con t0,
v t
( )
0 = V0. (6.8)Combinando le equazioni algebriche (6.4), (6.5) e (6.7) con l’equazione differenziale (6.6) si ottiene l’equazione differenziale a derivate ordinarie del primo ordine, in forma normale,
dv dt = ! 1
C v
R+ g v
( )
"
#$
%
&'+e t
( )
RC . (6.9)
L’equazione (6.9) deve essere risolta con la condizione iniziale (6.8). Questo è uno degli esempi più semplici di problema di Cauchy non lineare. Se il resistore N fosse un resistore lineare di resistenza RN l’equazione (6.9) si ridurrebbe all’equazione lineare
dv
dt = ! v
ReqC + e t
( )
ReqC (6.10)
dove Req!1= R!1+ RN
!1.
♦ 6.1.1 Esistenza e unicità della soluzione
La prima questione che bisogna affrontare quando si vuole risolvere numericamente un problema del tipo (6.3) riguarda l’esistenza e l’unicità della soluzione. Se la funzione
f = f u;t
( )
- è continua rispetto ad entrambi gli argomenti;
- è lipschitziana rispetto alla variabile u , cioè esiste una costante positiva L tale che per ogni t
f u
( )
1;t ! f u( )
2;t " L u1! u2 , (6.11)allora esiste ed è unica la soluzione del problema (6.3). La funzione f è lipschitziana rispetto alla variabile u se la derivata parziale di f rispetto alla variabile u esiste ed è
limitata 2 per ogni valore di u e per ogni t . Le soluzioni del problema (6.3) sono limitate per ogni t finito se f u;t
( )
è limitata per ogni valore di u e di t limitati. Per approfondimenti rimandiamo alla referenza [6.1].Questi risultati si estendono immediatamente a un sistema di equazioni differenziali del primo ordine del tipo (6.1) se f u,t
( )
è continua rispetto ad entrambi gli argomenti ed è lipschitziana in ogni dominio finito 3.6.1.2 Stabilità delle soluzioni
Un concetto importante nello studio del comportamento “qualitativo” delle soluzioni di un problema del tipo (6.3) è quello di stabilità. Un metodo numerico è affidabile se riesce a preservare il comportamento qualitativo delle soluzioni del problema in esame, in particolare le proprietà di stabilità delle soluzioni.
Figura 6.2 Soluzioni stabili; soluzioni asintoticamente stabili.
La soluzione u= u t
( )
del problema (6.3), definita nell’intervallo[
t0,!)
, si dice che è stabile, se, per ogni ! > 0, esiste un ! > 0 tale che per ogni soluzione !u = !u t( )
conu0! !u t
( )
0 <" (6.12)si ha
u t
( )
! !u t( )
<" (6.13)
2 Nel caso del modello esponenziale di un diodo a giunzione pn la funzione f è lipschitziana solo per valori finiti di u. Tuttavia, ciò non limita l’applicabilità del criterio appena enunciato perché in questo caso la soluzione del circuito è limitata.
3La funzione f= f u,t( ) è lipschitziana al finito, se per ogni x e y limitati esiste una costante L tale che f x, t( )! f y,t( ) " L x ! y ( ! indica una norma naturale in !n).
per ogni t > t0. Nel caso contrario la soluzione u = u t
( )
si dice instabile. Questo concetto di stabilità è anche noto come stabilità secondo Liapunov. Esso è illustrato in Figura 6.2a.Per assegnato ! > 0 costruiamo la striscia S di larghezza 2! , centrata sulla curva che rappresenta la funzione u t
( )
. Se la soluzione u t( )
è stabile comunque si scelga ! esistono altre soluzioni con condizioni iniziali diverse da u0 che partono nella striscia S e non la lasciano mai. Invece, se la soluzione u t( )
è instabile comunque si scelga !u t( )
0vicino a u0, la funzione !u t
( )
lascerà la striscia dopo un intervallo di tempo finito. Si osservi che in base alla definizione data, soluzione instabile non implica affatto che la soluzione sia divergente.Un altro concetto importante è quello di asintotica stabilità. La soluzione u= u t
( )
delproblema (6.3), definita nell’intervallo
[
t0,!)
si dice che è asintoticamente stabile, se è stabile ed esiste un ! > 0 tale che per ogni soluzione !u = !u t( )
conu0! !u t
( )
0 <" (6.14)si ha
limt!"u t
( )
# !u t( )
= 0 . (6.15)Anche questo concetto è illustrato graficamente in Figura 6.2b. Se la condizione iniziale di !u t
( )
è sufficientemente vicina a quella di u t( )
, allora la funzione !u t( )
si trova all’interno della striscia S e tende per t ! " alla funzione u t( )
.Esempio 6.2
Si consideri l’equazione differenziale lineare du
dt =!u+ b t
( )
(6.16)dove ! è un coefficiente costante nel tempo. Se ! < 0 tutte le soluzioni dell’equazione (6.16) sono asintoticamente stabili. Se ! = 0 tutte le soluzioni sono stabili. In entrambi i casi si ha se b t
( )
è limitata, tutte le soluzioni sono limitate. Invece, se ! > 0 tutte le soluzioni sono instabili e le soluzioni sono, in generale, divergono per t! " . Lasciamo al Lettore la dimostrazione di queste proprietà.Facciamo notare che non esistono sistemi lineari fisicamente realizzabili governati dall’equazione (6.16) con ! > 0. L’equazione (6.16) con ! > 0 può essere solo il modello linearizzato di un’equazione non lineare più complessa, come faremo vedere nel prossimo esempio. A causa delle non linearità nascono effetti di saturazione che limitano il valore della soluzione.
♦
6.1.3 Criteri di stabilità
Lo studio della stabilità delle soluzioni di equazioni non lineari è un problema estremamente complesso e quando può essere risolto richiede tecniche particolari. Come ora vedremo, esso può essere effettuato senza dover risolvere necessariamente l’equazione. Studieremo le proprietà di stabilità della soluzione u= u t
( )
del problema (6.3) attraverso una tecnica molto generale. Si consideri la differenza!u t
( )
= !u t( )
" u t( )
(6.17)tra la soluzione u= u t
( )
del problema (6.3) e la soluzione del problema d!udt = f !u,t
( )
,!u0 = u0+!u0.
"
#$
%$
(6.18)
Cerchiamo l’equazione che governa la differenza !u t
( )
. Sottraendo membro a membro le equazioni dei problemi (6.3) e (6.18) abbiamod!u
dt = f !u,t
( )
" f u,t( )
,!u t
( )
0 =!u0.#
$%
&%
(6.19)
Dal teorema della media (formula di Lagrange) abbiamo che, se f u,t
( )
è differenziabile esiste un 0!" ! 1 tale per ogni u e !uf
( )
!u ! f u( )
= "u"f u#(
!u! u)
(6.20)dove u! =!u+ 1"
(
!)
!u. Combinando la prima delle equazioni (6.19) e la (6.20) si ha d!udt = "f
"u u#!u. (6.21)
Moltiplicando ambo i membri della (6.21) per !u otteniamo d!u2
dt = 2"f
"u u#!u2. (6.22)
Consideriamo, ora, i tre casi:
a) !f / !u " 0 per ogni u!";
b) !f / !u < 0 per ogni u!" con !f / !u " #$min dove !min > 0 è una costante;
c) !f / !u > 0 per u !D dove D è un intervallo limitato di !. Nel caso a) si ha
d!u2
dt " 0 , (6.23)
quindi deve essere necessariamente
!u2
( )
t "!u02 (6.24)
perché !u2
( )
t non può crescere. In questo caso la soluzione u t( )
è stabile. La condizione !f / !u " 0 è la generalizzazione al caso non lineare della condizione ! = 0 per l’equazione lineare.Nel caso b) si ha
d!u2
dt " #2$min!u2. (6.25)
Integrando per parti si ottiene
!u2
( )
t "!u02exp%$min
(
t# t0)
'( , (6.26)quindi
limt!"#u t
( )
= 0 , (6.27)ovvero
limt!"$%!u t
( )
# u t( )
&' = 0 . (6.28) In questo caso la soluzione u t( )
è asintoticamente stabile. La condizione !f / !u < 0 è la generalizzazione al caso non lineare della condizione ! < 0 per l’equazione lineare.Nel caso c) si ha
d!u2
dt > 0 per u! "D . (6.29)
In queste situazioni la soluzione u t
( )
è instabile perché !u2 cresce fino a quando la (6.29) è verificata. La condizione !f / !u > 0 è la generalizzazione al caso non lineare della condizione ! > 0 per l’equazione lineare.Riassumendo, abbiamo il seguente criterio di stabilità:
a) se !f / !u " 0 per ogni u!" tutte le soluzioni sono stabili;
b) se !f / !u < 0 per ogni u!" con !f / !u " #$min dove !min > 0 è una costante, tutte le soluzioni sono asintoticamente stabili;
c) se !f / !u > 0 per u !D dove D è un intervallo limitato di ! possono esserci soluzioni instabili.
Applicheremo, ora, questi risultati alle soluzioni del circuito di Figura 6.1.
Esempio 6.3
Per evidenziare alcuni aspetti fondamentali della stabilità che saranno ampiamente utilizzati in questa Nota studieremo il problema della stabilità delle soluzioni del circuito di Figura 6.1. Solo per semplificare la trattazione, tratteremo il caso in cui la tensione del generatore di tensione sia costante nel tempo, e t
( )
= E0. In questo caso, il circuito ha soluzioni stazionarie. Analizzeremo le proprietà di stabilità di queste soluzioni in due diverse situazioni:a) il resistore non lineare N è un diodo a giunzione pn;
b) il resistore non lineare N è un diodo tunnel.
Figura 6.3 Studio grafico delle dinamiche delle soluzioni del circuito di Figura 6.1.
Le soluzioni stazionarie sono rappresentate dalle intersezioni della curva caratteristica del resistore non lineare con la retta che rappresenta la funzione (retta di carico, Figura 6.3)
i= E! v
R . (6.30)
In Figura 6.3a è riportata l’intersezione della retta di carico con la curva caratteristica del diodo a giunzione pn; in Figura 6.3b è riportata l’intersezione della retta di carico con la curva caratteristica del diodo tunnel. Nel primo caso c’è una sola intersezione e, quindi, una sola soluzione stazionaria, perché la curva caratteristica del diodo a giunzione pn è monotona crescente. Nel secondo caso, invece, è possibile avere tre intersezioni e, quindi, tre soluzioni stazionarie perché la curva caratteristica del diodo tunnel non è monotona, ha un tratto a pendenza negativa.
Analizziamo, ora la stabilità di queste soluzioni stazionarie.
Caso a)
La caratteristica del diodo a giunzione pn può essere rappresentata attraverso la relazione approssimata
g v
( )
= Is(
ev /VT ! 1)
(6.31)con IS = 10!15A e VT = 26mV ; per gli altri parametri si assuma E0 = 1V e R= 1!. In questo caso l’equazione (6.9) ha una sola soluzione stazionaria. Utilizzando il Programma 5.2 possiamo calcolare questa soluzione. Essa è V ! 0.87V .
Per studiare la stabilità della soluzione stazionaria utilizziamo sia il criterio di stabilità appena dimostrato, sia un metodo grafico. In questo caso la funzione f v,t
( )
è data daf v,t
( )
= ! 1C v
R+ Is
(
ev /VT ! 1)
"
#$
%
&'+ E
RC, (6.32)
quindi
df dv= ! 1
C 1 R+ Is
VT ev /VT
"
#$
%
&' ( ! 1
RC < 0. (6.33)
Essendo la curva caratteristica del diodo a giunzione pn monotona crescente, il resistore lineare e il condensatore passivi ( R> 0 e C > 0 ), la funzione f è monotona decrescente nella variabile v . In base al criterio di stabilità, tutte le soluzioni sono asintoticamente stabili, quindi lo è anche quella stazionaria.
Dimostreremo, ora, che la soluzione stazionaria è asintoticamente stabile anche attraverso un metodo grafico. Riportiamo su un piano che ha come asse delle ascisse la tensione v sia la curva caratteristica del diodo, sia la retta di carica, Figura 6.3a. Come
abbiamo già messo in evidenza in corrispondenza del punto di intersezione tra la retta e la curva caratteristica del diodo si ha
dv
dt = 0. (6.34)
L’ascissa di questo punto è la soluzione stazionaria del circuito. Dalla Figura 6.3a si evince immediatamente che
dv
dt > 0 per v < V, dv
dt < 0 per V < v.
(6.35)
Di conseguenza, sia se v 0
( )
< V , sia se v 0( )
> V si ha v t( )
! V per t ! " . Pertanto, la soluzione stazionaria v= V è una soluzione asintoticamente stabile: comunque sia il valore della condizione iniziale la soluzione tende alla soluzione stazionaria v= V pert! " . Caso b)
La caratteristica del diodo tunnel può essere rappresentata attraverso la relazione approssimata
g v
( )
= a3v3+ a2v2+ a1v (6.36) dove a1 = 6.0!"1, a2 = !4.5 "V( )
!1, a3= 1 !V( )
2 "1. Si assuma E0 = 15V e R= 6!. In questo caso l’equazione (6.9) ha tre soluzioni stazionarie come abbiamo visto attraverso il metodo grafico. Utilizzando il Programma 5.2 possiamo calcolare queste soluzioni. Esse sono: V1! 0.7362V , V2 = 1.5 e V3= 2.2638V . Ora ne studieremo le proprietà di stabilità.Anche in questo caso per studiare la stabilità della soluzione stazionaria utilizziamo sia il criterio di stabilità appena dimostrato, sia un metodo grafico. In questo caso la funzione
f v,t
( )
è data daf v,t
( )
= !1C v
R+ a3v3+ a2v2+ a1v
"
#$
%
&'+ E
RC , (6.37)
quindi
df dv = ! 1
C 3a3v2 + 2a2v+ a1+ 1 R
"
#$ %
&'. (6.38)
In un intorno D della soluzione stazionaria v = V2 si ha df / dv> 0 . Ciò è conseguenza del fatto che la curva caratteristica del diodo tunnel ha un tratto con pendenza negativa in quello intorno e la retta di carico ha pendenza in valore assoluto più piccola della pendenza della curva caratteristica del diodo in v= V2. In base al criterio di stabilità, possono esistere soluzioni instabili. In particolare, la soluzione stazionaria
v= V2 è instabile.
Dimostreremo, ora, che la soluzione stazionaria v= V2 è instabile anche attraverso il metodo grafico. Riportiamo sul piano che ha come asse delle ascisse la tensione v sia la curva caratteristica del diodo tunnel, sia la retta di carico (Figura 6.3b). In corrispondenza dei punti di intersezione tra la retta e la curva caratteristica del diodo tunnel si ha di nuovo
dv
dt = 0. (6.39)
Le ascisse di questi punti sono le soluzioni stazionarie del circuito. Dalla Figura 6.3b si evince immediatamente che
dv
dt > 0 per v < V1 e V2 < v < V3, dv
dt < 0 per V1 < v < V2 e v< V3.
(6.40)
Di conseguenza se v 0
( )
< V1 o V1< v 0( )
< V2 si ha v t( )
! V1 per t! " , mentre se se v 0( )
> V3 o V2 < v 0( )
< V3 si ha v t( )
! V3 per t! " . La soluzione stazionaria v = V2non può essere mai raggiunta a meno che non si abbia v 0
( )
= V2. Pertanto, le soluzioni stazionarie v= V1 e v= V3 sono asintoticamente stabili, mentre la soluzione stazionaria v= V2 è instabile. La soluzione stazionaria v= V2 è instabile perché essa si trova sul tratto della curva caratteristica del diodo a pendenza negativa, mentre le altre due soluzioni stazionarie sono asintoticamente stabili perché si trovano sul tratto a pendenza positiva.Non sarebbe fisicamente ammissibile una curva caratteristica monotona decrescente ovunque (con la convenzione dell’utilizzatore) per motivi di natura energetica, di conseguenza si può avere df / dv> 0 solo in regioni limitate del dominio di definizione di f . Essendo df / dv> 0 in una regione limitata D del dominio di definizione di f v
( )
,le soluzioni con condizioni iniziali appartenenti a D sono instabili ma non divergono per t! " . Le soluzioni instabili del circuito, a differenza delle soluzioni dell’equazione (6.16) con ! > 0, non divergono per t ! " : tendono al regime stazionario v = V1 o v= V3 a seconda delle condizioni iniziali. Instabilità non è affatto sinonimo di soluzione con crescita illimitata!!!
Modello linearizzato
Ora chiariremo perché è instabile proprio la soluzione che si trova sul tratto a pendenza negativa della curva caratteristica del diodo tunnel. Indichiamo con V una soluzione stazionaria del circuito e analizziamo l’andamento di una soluzione v= v t
( )
con condizione iniziale molto prossima ad essa. La soluzione v t
( )
può essere cercata ponendov t
( )
= V +!v t( )
(6.41)con
!v t
(
= t0)
=!v0 (6.42)e !v0 << V . Essendo !v0 “piccolo” possiamo ritenere che esista almeno un intervallo di tempo finito durante il quale l’ampiezza massima di !v sia piccola se confrontata con la soluzione stazionaria V .
Sostituendo la (6.41) nella (6.9), trascurando i termini di ordine di grandezza superiori a quello lineare, otteniamo il modello linearizzato (del circuito di Figura 6.1 intorno alla soluzione stazionaria v= V )
d!v
dt = " !v
ReqC , (6.43)
dove
Req!1 = 1 R+ dg
dv v=V . (6.44)
Se dg / dv v=V > 0 (ciò può accadere, ad esempio, se il resistore non lineare è un diodo a giunzione pn o se la soluzione stazionaria è sul tratto a pendenza positiva della curva caratteristica del diodo tunnel) si ha Req > 0 e !v t
( )
" 0 per t ! " . In queste situazioni la soluzione stazionaria v= V è asintoticamente stabile. Invece, se dg / dv v=V < 0 (ciò può accadere, ad esempio, se il resistore non lineare è un diodo tunnel e la soluzione stazionaria è sul tratto a pendenza negativa) si può verificare che Req < 0 e !v t( )
" #per t! " . In questa situazione la soluzione stazionaria v = V è instabile. Si osservi che il modello linearizzato, a differenza del modello non lineare completo, non è in grado di prevedere la saturazione dell’instabilità dovuto alla presenza della non linearità.
♦
6.2 Metodi alle differenze finite
La strategia generale dei metodi alle differenze finite per risolvere un problema del tipo (6.3) consiste nel dividere l’intervallo di integrazione I = t!" 0,tf#$ (tf non può che essere di lunghezza finita), in N sottointervalli Ik = t
[
k,tk+1]
n= 0,1,..., N ! 1, di ampiezza (uniforme, solo per semplicità)!t = tf " t0
N . (6.45)
Si ha
tk = t0+ k!t per k = 1,2,..., N . (6.46) Il parametro !t è il passo di discretizzazione dell’intervallo I . L’obiettivo è determinare i valori della funzione incognita u agli istanti t1,t2,... a partire dalla conoscenza del suo valore all’istante t0,
u1= u t
( )
1 ,u2 = u t( )
2 ,...,uk = u t( )
k ,... . (6.47)La successione dei valori u1,u2,...,uk,... costituisce la soluzione del problema (6.3). Per
!t " 0 il numero di campioni N dell’intervallo finito I tende all’infinito e otteniamo la funzione u= u t
( )
. E’ evidente che in una simulazione numerica per quanto !t possa essere scelto piccolo deve essere diverso da zero. Nella Nota 7 sarà affrontato il problema di come “recuperare” i valori della soluzione in istanti di tempo diversi da quelli della discretizzazione attraverso tecniche di interpolazione.Per determinare le equazioni per i campioni u1,u2,...,uk,... bisogna “algebrizzare”
l’operatore di derivata temporale che compare nelle (6.3), cioè bisogna determinare una approssimazione dell’operatore derivata in termini di sole operazioni algebriche (somme, differenze, …).
6.2.1 Metodo di Eulero esplicito
La funzione incognita u= u t
( )
sia sufficientemente regolare da poter essere sviluppata attraverso la formula di Taylor di ordine 2. Allora esiste un istante !tk!Ik tale cheu t
( )
k+1 = u t( )
k + dudt t=tk
(
tk+1! tk)
+12 d2u
dt2 t= !tk
(
tk+1! tk)
2, (6.48)ovvero (notazione sintetica)
uk+1 = uk +du
dt t=tk !t +1 2
d2u
dt2 t= !tk!t2. (6.49) La (6.49) dà
du
dt t=tk = uk+1! uk
"t !1 2
d2u
dt2 t= !tk"t . (6.50) Per !t " 0 il secondo termine a destra della relazione (6.50) tende a zero, mentre il primo termine tende ad un valore finito, in generale diverso da zero. Questa relazione ci suggerisce che possiamo approssimare il valore della derivata prima di u all’istante
t= tk attraverso la differenza finita 4 du
dt t=tk ! uk+1" uk
#t , (6.51)
a patto di tollerare un errore che va a zero come !t per !t " 0. Questa è la formula alle differenze finite di Eulero esplicito per l’operatore di derivata prima.
Dall’equazione (6.3) si ha anche du
dt t=tk= f u
(
k;tk)
. (6.52)Combinando le (6.51) e (6.52) si ottiene l’equazione (approssimata) che governa la successione u1,u2,...,uk,...
uk+1! uk+ "tf u
(
k;tk)
. (6.53)Questo è il metodo di Eulero esplicito. La (6.53) è risolta iterativamente per k= 0,1,... a partire dal valore iniziale u0 assegnato attraverso la condizione iniziale (6.3). L’aggettivo
“esplicito” sta ad indicare il fatto che la legge (6.53) dà in modo esplicito il valore uk+1 (incognito) in funzione del valore uk (noto al passo precedente).
L’errore che si commette con il metodo di Eulero esplicito (la differenza tra la soluzione numerica e quella esatta), a causa del fatto che nella (6.51) è stato trascurato il termine 0.5!!u "t
( )
k !t prende il nome di errore di troncamento 5. Il metodo di Eulero esplicito è un metodo alle differenze finite del primo ordine perché l’errore di4 Il significato geometrico della (6.51) è immediato: approssimiamo la tangente della curva, che rappresenta nel piano ( )t, u la funzione u= u t( )) nel punto con coordinate
(
tk, uk)
con la secante passante per i puntitk, uk
( )
e(
tk+1, uk+1)
.5 Nel testo, per ridurre l’ingombro, indicheremo con !u, !!u, …, le derivate ordinarie di u rispetto al tempo di ordine 1, 2, … .
troncamento tende a zero linearmente in !t per !t " 0: l’ordine di grandezza dell’errore è
O !
( )
t 6.La successione u1,u2,...,uk,... generata dalla (6.53) a partire dal valore iniziale u0 è una soluzione approssimata del problema originario sia a causa dell’errore di troncamento, sia a causa dell’errore di arrotondamento dovuto alla precisione finita delle macchine di calcolo.
Nel Programma 6.1 viene implementato il metodo di Eulero esplicito, [6.2]. Le variabili “t0”, “T”, “N” e “y0” sono, rispettivamente, l’istante iniziale, l’istante finale, il numero di intervalli elementari in cui è discretizzato l’intervallo t
( )
0,tf e il valore iniziale. La variabile “f ” è una stringa che dà f u;t( )
in funzione di u e t .Programma 6.1: Eulero esplicito function [t,u]=eulesp1D(t0,T,N,f,y0)
% Metodo di Eulero esplicito: risolve il sistema di ode dy/dt=f(y;t) h=(T-t0)/N;tt=[t0:h:T]; u(1)=y0;
for i=2:N+1 y=u(i-1); t=tt(i-1);
u(i)=y+h*eval(f)';
end t=tt;
return
Una questione fondamentale è come scegliere il passo di discretizzazione !t. Da questa scelta dipende l’errore. Indichiamo con u! = u!
( )
t la soluzione esatta del problema in esame. L’errore ek è definito comeek = uk! u"
( )
tk . (6.54)Affronteremo in dettaglio questa questione nel prossimo paragrafo, per ora ci limiteremo a fare qualche considerazione del tutto generale aiutandoci con un esempio.
Esempio 6.4
Risolviamo attraverso il metodo di Eulero esplicito l’equazione lineare du
dt = !u
" (6.55)
con ! > 0 e condizione iniziale u t
(
= 0)
= u0. Abbiamo considerato come primo esempio questo problema perché la soluzione è esprimibile in forma analitica,
6 Con il simbolo O !t
( )
p indichiamo una grandezza che tende a zero almeno come !tp per !t.u!
( )
t = u0e"t /# per t! 0 , (6.56) e quindi possiamo valutare l’errore introdotto nella soluzione numerica dall’approssimazione (6.51). La (6.56) è l’esempio più semplice di soluzione asintoticamente stabile: qualunque sia il valore iniziale u0 si ha u!( )
t " 0 per t! " . Si intuisce che per ottenere una buona approssimazione con il metodo di Eulero è necessario che il passo di discretizzazione temporale !t sia molto più piccolo della costante di tempo ! .In Tabelle 6.1 riportiamo l’andamento dell’errore ek ottenuto risolvendo l’equazione in esame con il Programma 6.1 per due valori del passo di integrazione. Come ci aspettavamo al diminuire di !t l’errore diminuisce linearmente in !t.
Tabella 6.1
tk/! ek per !t /" = 10#2 ek per !t /" = 10#3 u!
( )
tk 0.25 9.8!10"4 9.7!10"5 0.780.5 1.5!10"3 1.5!10"4 0.61
1.0 1.8!10"3 1.8!10"4 0.37
2.0 1.4!10"3 1.4!10"4 0.14
4.0 3.7!10"4 3.6!10"5 0.18!10"1
10.0 2.2!10"6 2.3!10"7 0.45!10"4
Cosa accade se scegliamo !t confrontabile con ! ? L’errore cresce al crescere di !t ma l’andamento qualitativo resta invariato fino a quando !t = 2" . Per !t > 2" la soluzione numerica diventa completamente diversa da quella esatta. Cosa accade? Possiamo vederlo subito particolarizzando la (6.53) al caso in esame. Abbiamo
uk =!uk"1 (6.57)
dove
!= 1" #t /$ . (6.58)
La soluzione dell’equazione alle differenze (6.57) con il valore iniziale u0è
uk =!ku0 per k = 1,2,... . (6.59) Innanzitutto, per !t < 2" si ha ! < 1 e anche la soluzione numerica è asintoticamente stabile. Per !t <" si ha 0<!< 1 e uk tende a zero per k! " con legge monotona; per
!t =" si ha != 1 e uk = u0; per ! < "t < 2! si ha !1 <"< 0 e uk tende a zero per k! " oscillando; per !t = 2" si ha != "1 e uk = !1
( )
ku0 (oscilla con ampiezza costante); infine, per !t > 2" si ha ! < "1 e uk diverge (oscillando) per k! ". In conclusione, solo per !t < 2" la soluzione numerica è asintoticamente stabile. Inoltre,solo per !t <" la soluzione numerica ha lo stesso andamento qualitativo della soluzione esatta, cioè tende a zero con andamento monotono per k! ".
♦
Esercizio 6.1
Si consideri il circuito di Figura 6.1 assumendo che il resistore non lineare sia un diodo a giunzione pn descrivibile attraverso l’equazione
g v
( )
= Is(
ev /VT ! 1)
(6.60)con IS = 10!15A e VT = 26mV ; per gli altri parametri si assuma e t
( )
= 1V e R= 1!. Sirisolva l’equazione con v 0
( )
= 0 usando il Programma 6.2 con t0 = 0 , T = 5ms e N = 100 . Il circuito in esame raggiunge il regime stazionario per t! " . Si confronti il valore della tensione a regime ottenuta con il Programma 6.2 con il valore ottenuto risolvendo il circuito resistivo equivalente di regime con il metodo di Newton-Raphson (Programma 5.2). Infine, si ripeta la simulazione variando il passo di discretizzazione.♦ Esempio 6.5
Risolviamo attraverso il metodo di eulero esplicito l’equazione du
dt = u
! (6.61)
con ! > 0 e condizione iniziale u t
(
= 0)
= u0. La soluzione èu!
( )
t = u0et /" per t! 0 (6.62)e diverge t! " con costante di tempo ! . Questo è l’esempio più semplice di soluzione instabile.
Applicando il metodo di Eulero esplicito a questa equazione abbiamo di nuovo l’equazione (6.57) con ! dato da
!= 1+ "t /# . (6.63)
Per ogni valore di !t > 0 la soluzione numerica è instabile e diverge con legge monotona allo stesso modo della soluzione esatta. Anche in questo caso, se vogliamo una soluzione
numerica accurata, che non sia solo qualitativamente ma anche quantitativamente vicina alla soluzione esatta, dobbiamo scegliere !t molto più piccolo della costante di tempo ! .
♦ Possiamo concludere questo paragrafo notando che il metodo di Eulero esplicito preserva, almeno qualitativamente, l’andamento delle soluzioni instabili comunque sia il valore di !t. Invece, per preservare l’andamento qualitativo delle soluzioni asintoticamente stabili bisogna scegliere un !t più piccolo di due volte la costante tempo caratteristica della soluzione.
6.2.2 Metodo di Eulero implicito
Ora illustreremo un altro metodo di discretizzazione per equazioni differenziali del primo ordine. La (6.48) dà uk+1 attraverso un’espansione di u nell’intono dell’istante tk. C’è un’altra possibilità, esprimere uk attraverso una espansione di u nell’intorno dell’istante tk+1. Come per la (6.48), esiste un istante ˆtk !Ik tale che
u t
( )
k = u t( )
k+1 + dudt t=tk+1
(
tk ! tk+1)
+ 12 d2u
dt2 t= ˆtk
(
tk! tk+1)
2, (6.64)ovvero (notazione sintetica)
uk = uk+1!du
dt t=tk+1"t +1 2
d2u
dt2 t= ˆtk"t2. (6.65)
La (6.65) dà per !t " 0 du
dt t=tk+1 =uk+1! uk
"t !1 2
d2u
dt2 t= ˆtk"t . (6.66)
Come nel caso del metodo di Eulero esplicito, la (6.66) suggerisce che il valore della derivata prima di u all’istante t= tk+1 può essere approssimato attraverso la differenza finita
du
dt t=tk+1 ! uk+1" uk
#t , (6.67)
a patto di tollerare un errore che va a zero come !t per !t " 07. Questa è la formula di Eulero implicito per l’operatore di derivata prima. La differenza tra la (6.67) e la (6.51) sta nel fatto che nella (6.67) si considera il valore della derivata all’istante tk+1 mentre nella (6.51) si considera il valore della derivata all’istante tk, l’espressione a destra è la stessa.
Dall’equazione (6.3) si ha du
dt t=tk+1= f u
(
k+1;tk+1)
. (6.68)Combinando le (6.67) e (6.68) si ottiene un’altra equazione (approssimata) che governa la successione u1,u2,...,uk,...
uk+1! "tf u
(
k+1;tk+1)
= uk (6.69)a partire da un assegnato valore iniziale u0. Questa equazione ha una forma completamente diversa dalla (6.53). Essa dà uk+1 in funzione di uk in forma implicita: ad ogni passo dell’iterazione bisogna risolvere, in generale, un’equazione algebrica non lineare. Questo è il metodo di Eulero implicito. Come il metodo di Eulero esplicito, anche quello implicito è un metodo alle differenze finite del primo ordine: l’errore di troncamento tende a zero come !t per !t " 0. In seguito vedremo che il metodo di Eulero implicito ha proprietà di stabilità numerica diverse da quelle del metodo di Eulero esplicito.
Programma 6.2: Eulero implicito function [t,u]=eulimp1D(t0,T,N,f,df,y0)
% Metodo di Eulero implicito: dy/dt=f(y;t) h=(T-t0)/N;tt=[t0:h:T];
u(1)=y0;
for i=2:N+1 t=tt(i);
fun=['y-',num2str(h,16),'*(',char(f),')-',num2str(u(i-1),16)];
dfun=['1-',num2str(h,16),'*(',char(df),')'];
u(i)=zerof1D(fun,dfun,u(i-1),t);
end t=tt;
return
7 Il significato geometrico della (6.67) è immediato: approssimiamo la tangente della curva, che rappresenta nel piano ( )t, u la funzione u= u t( )) nel punto con coordinate
(
tk+1, uk+1)
con la secante passante per i punti(
tk, uk)
e(
tk+1, uk+1)
.Programma 6.3: Soluzione dell’equazione (6.69) function [zero]=zerof1D(f,df,x0,t)
% Risolve l’equazione algebrica non lineare uk+1-Dt*f(uk+1;tk+1)-uk=0
% attraverso l’algoritmo di Newton-Raphson nmax=1000;toll=1.e-13;
[zero,niter]=newton1D(f,df,t,x0,toll,nmax);
return
Nel Programma 6.2 riportiamo una implementazione del metodo di Eulero implicito, [6.2]. Si noti l’uso della function “zerof” per la soluzione dell’equazione algebrica non lineare (6.69) ad ogni passo dell’iterazione di Eulero. La soluzione iniziale di tentativo per “zerof” al passo k+ 1 dell’iterazione di Eulero è scelta uguale uk, la soluzione al passo precedente dell’iterazione di Eulero. Nel Programma 6.3 si riporta una implementazione di questa funzione che si basa sull’algoritmo di Newton-Raphson (vedi Programma 5.2).
Perché considerare un metodo così complicato, che richiede per essere implementato addirittura la soluzione ad ogni passo di un’equazione algebrica non lineare ? Daremo una risposta precisa a questa domanda nel prossimo paragrafo. Per il momento ci limiteremo a fare qualche considerazione prendendo spunto da quanto si osserva in un caso particolare ma significativo.
Esempio 6.6
Risolviamo l’equazione dell’Esempio 6.4 impiegando il metodo di Eulero implicito.
Particolarizzando la (6.69) all’equazione lineare (6.55) si ha di nuovo l’equazione (6.57), ma in questo caso il parametro ! è dato da
!= 1
1+ "t /# . (6.70)
E’ evidente che (essendo per ipotesi ! > 0) si ha 0<!< 1 per ogni !t > 0. Dunque, con il metodo di Eulero implicito, comunque si sceglie il valore di !t, l’andamento qualitativo della soluzione numerica riproduce quello della soluzione esatta. E’ chiaro che quando più piccolo sarà !t tanto più piccolo sarà lo scostamento quantitativo della soluzione numerica da quella esatta.
♦ Esercizio 6.2
Risolvere il problema dell’Esercizio 6.1 con il metodo di Eulero implicito.
♦
Esempio 6.7
Risolviamo l’equazione dell’Esempio 6.5 impiegando il metodo di Eulero implicito.
Particolarizzando la (6.69) all’equazione lineare (6.55) si ha di nuovo l’equazione (6.57), ma in questo caso il parametro ! è dato da
!= 1
1" #t /$ . (6.71)
Innanzitutto, per 0< !t < 2" si ha ! > 1 e anche la soluzione numerica è instabile. Per 0< !t <" si ha !> 1 e uk tende diverge per k! " con legge monotona; per !t =" si ha != " e uk = ! ; per ! < "t < 2! si ha ! < "1 e uk ancora diverge per k! " ma oscilla; per !t = 2" si ha ! = "1 e uk = !1
( )
ku0 (oscilla con ampiezza costante); infine, per !t > 2" si ha !1 <"< 0 e uk tende a zero per k! " oscillando. Allora, solo per!t <" la soluzione numerica ha un andamento qualitativo che riproduce quello della soluzione esatta. Già per !t =" la soluzione è molto diversa.
♦ Possiamo concludere questo paragrafo notando che il metodo di Eulero implicito preserva, almeno qualitativamente, l’andamento delle soluzioni asintoticamente stabili comunque sia il valore di !t. Invece, per preservare l’andamento di soluzioni instabili bisogna scegliere un !t più piccolo della costante di tempo caratteristica della soluzione.
C’è una sorta di complementarietà tra il metodo di Eulero esplicito e quello implicito.
6.2.3 Metodo di Crank-Nicolson
In questo paragrafo presenteremo un metodo che, a differenza dei metodi di Eulero, è del secondo ordine e preserva il comportamento qualitativo sia delle soluzioni asintoticamente stabili che di quelle instabili comunque si scelga il passo di discretizzazione.
Applichiamo la formula di Taylor al terzo ordine prima per esprimere uk+1 in funzione di
uk+1/2! u t
(
k+1/2)
, (6.72)dove
tk+1/2 ! tk +"t
2 = tk+ tk+1
2 ! tk, (6.73)
e poi per esprimere uk in funzione sempre di uk+1/2; tk è la media aritmetica tra tk e tk+1. Allora, per !t " 0 otteniamo
uk+1= uk+1/2+du dt t=tk+1/2
!t 2 +d2u
dt2 t=tk+1/2
!t2
4 + O !t
( )
3 (6.74)e
uk = uk+1/2!du dt t=tk+1/2
"t 2 +d2u
dt2 t=tk+1/2
"t2
4 + O "t
( )
3 . (6.75)Sottraendo membro a membro le (6.74) e (6.75) abbiamo du
dt t=tk+1/2 =uk+1! uk
"t + O "t
( )
2 . (6.76)La (6.76) dà per !t sufficientemente piccolo du
dt t=tk+1/2 ! uk+1" uk
#t . (6.77)
Questa è la formula della derivata centrale 8. Essa è del secondo ordine perché l’errore commesso tende a zero come !t2 per !t " 0.
Dall’equazione (6.3) abbiamo che du
dt t=tk+1/2 = f u
(
k+1/2;tk+1/2)
. (6.78)E’ poco utile combinare le (6.77) e (6.78), perché la (6.78) richiede il valore della funzione incognita all’istante intermedio tk+1/2, mentre la (6.77) richiede i valori della funzione incognita negli istanti tk e tk+1. Attraverso l’interpolazione possiamo esprimere il secondo membro della (6.78) in funzione dei campioni uk e uk+1 e degli istanti di tempo tk e tk+1 con un errore che tende a zero almeno come !t2 per !t " 0. Ora cercheremo questa interpolazione. Sommando membro a membro le (6.74) e (6.75) otteniamo
uk !uk+1+ uk
2 = uk+1/2+ O "t
( )
2 . (6.79)Con i simboli uk indichiamo la media aritmetica tra uk e uk+1. Dalla (6.79) segue che f u
(
k+1/2;tk+1/2)
= f u(
k+ O !t( )
2 ; tk)
. (6.80)
8 Il significato geometrico della (6.77) è immediato: approssimiamo la tangente della curva, che rappresenta nel piano ( )t, u la funzione u= u t( )) nel punto con coordinate
(
tk+1/2, uk+1/2)
con la secante passante per i punti(
tk, uk)
e(
tk+1, uk+1)
.Applichiamo, ora, la formula di Taylor alla funzione di due variabili f u,t
( )
, prima per esprimere f u(
k+1,tk+1)
in funzione di f u(
k+ O !t( )
2 ; tk)
e poi per esprimere f u(
k,tk)
infunzione della stessa grandezza. Ignorando i termini dal terzo ordine in poi otteniamo
f u
(
k+1,tk+1)
! f u(
k+ O "t( )
2 ; tk)
+#u#f u=ut= t %&'uk+12$ uk()* +#f#t u=ut= t %&'tk+12$ tk()*+ O "t( )
2 (6.81)e
f u
(
k,tk)
! f u(
k+ O "t( )
2 ; tk)
#$u$f ut= t=u%&'uk+12# uk()* #$f$t ut= t=u%&'tk+12# tk()*+ O "t( )
2 . (6.82)Sottraendo membro abbiamo
f u
(
k+ O !t( )
2 ; tk)
= f u(
k+1,tk+12)
+ f u(
k,tk)
+ O !t( )
2 , (6.83)quindi per !t " 0
f u
(
k+ O !t( )
2 ; tk)
" f u(
k+1,tk+12)
+ f u(
k,tk)
. (6.84)Questa è la formula di interpolazione che cercavamo. L’errore nella (6.84) tende a zero come !t2 per !t " 0, quindi è una formula di interpolazione del secondo ordine.
Combinando le (6.77) e (6.83) abbiamo il metodo di Crank-Nicolson uk+1!"t
2 f u
(
k+1,tk+1)
= uk+ "t2 f u
(
k,tk)
. (6.85)L’errore di troncamento tende a zero come !t2 per !t " 0 perché sia la (6.77) che la (6.83) sono formule del secondo ordine. Per questa ragione si dice che il metodo di Crank-Nicolson è un metodo alle differenze finite del secondo ordine. Come il metodo di Eulero implicito, anche il metodo di Crank-Nicolson dà in forma implicita uk+1 in funzione di uk: ad ogni passo dell’iterazione bisogna risolvere un’equazione algebrica non lineare.
Nel Programma 6.4 viene presentata una implementazione in MATLAB del metodo di Crank-Nicolson, [6.2]. Questo programma richiede gli stessi parametri del Programma 6.2 e la function “zerof” implementata nel Programma 5.3.
Programma 6.4 Crank-Nicolson
function [t,u]=cranknic1D(t0,T,N,f,df,y0)
% Metodo di Crank-Nicolson per risolvere l'equazione dy/dt=f(y;t) h=(T-t0)/N;tt=[t0:h:T];
u(1)=y0;
for i=2:N+1
y=u(i-1);t=tt(i-1);
cc=eval(f)*h/2+y;
t=tt(i);
fun=['y-',num2str(h/2,16),'*(',char(f),')-',num2str(cc,16)];
dfun=['1-',num2str(h/2,16),'*(',char(df),')'];
u(i)=zerof1D(fun,dfun,u(i-1),t);
end t=tt;
return
Esercizio 6.3
Risolvere il problema dell’Esempio 6.4 con il metodo di Crank-Nicolson e confrontare la soluzione numerica con quella analitica. Inoltre, confrontare l’errore ottenuto con il metodo di Crank-Nicolson con l’errore ottenuto con uno dei due metodi di Eulero e verificare che la precisione ottenuta con il metodo di Eulero con passo di discretizzazione !t è praticamente la stessa precisione ottenuta con il metodo di Crank- Nicolson con passo !t .
♦ Esercizio 6.4
Risolvere il problema dell’Esercizio 6.1 con il metodo di Crank-Nicolson.
♦ Esempio 6.8
Consideriamo l’equazione
du
dt =!u (6.86)
con la condizione iniziale u t
(
= 0)
= u0. La soluzione èu t