% Metodo di Eulero esplicito per risolvere il sistema dy/dt=f(y;t).
% Attenzione: y0 è un vettore colonna.
h=(T-t0)/N;t=[t0:h:T];u(:,1)=y0;
for i=2:N+1
f=fun(t(i-1),u(:,i-1));
u(:,i)=u(:,i-1)+h*f';
end return
Programma 6.6 Metodo di Eulero Implicito function [t,u]=eulimp(t0,T,N,y0,toll,nmax)
% Metodo di Eulero implicito: risolve il sistema ode dy/dt=f(y;t).
% Attenzione: y0 è un vettore colonna.
h=(T-t0)/N;t=[t0:h:T];u(:,1)=y0;
for i=2:N+1
[zero,niter]=newton(t(i),u(:,i-1),toll,nmax,h);
u(:,i)=zero;
end return
%
%---
%
function [g,dg]=fung(t,y,yb,h)
% Assembla lo schema alle differenze finite per il metodo di Eulero implicito.
[f,df,N]=funf(t,y);
I=eye(N);
g=y-h*f'-yb;
dg=I-h*df;
return
Programma 6.7 Soluzione dell’equazione algebrica non lineare (6.239) o (6.240) function [zero,niter]=newton(t,x0,toll,nmax,h)
% Metodo di Newton-Raphson per un sistema di equazioni non lineari f(x)=0.
y=x0;yb=x0;
[gx,dgx]=fung(t,y,yb,h);
niter=0; diff=toll+1;
while diff>=toll&niter<=nmax niter=niter+1;
diff=-dgx\gx;
y=y+diff;
diff=norm(diff);
[gx,dgx]=fung(t,y,yb,h);
end;
zero=y;
return
Programma 6.8 Metodo di Crank-Nicolson function [t,u]=cranknic(t0,T,N,y0,toll,nmax)
% Metodo di Crank-Nicolson per risolvere il sistema dy/dt=f(y;t).
% Attenzione: y0 è un vettore colonna.
h=(T-t0)/N;t=[t0:h:T];
u(:,1)=y0;
for i=2:N+1
[zero,niter]=newton(t(i),u(:,i-1),toll,nmax,h);
u(:,i)=zero;
end return
%
%---
%
function [g,dg]=fung(t,y,yb,h)
% Assembla lo schema alle differenze finite per il metodo di Crank-Nicolson.
[f]=funf(t,y); [fb]=funf(t-h,yb);
[df,N]=jacob(t,y);
I=eye(N);
g=y-0.5*h*f'-0.5*h*fb'-yb;
dg=I-h*df;
return
Il Programma 6.5 implementa il metodo di Eulero esplicito, il Programma 6.6 il metodo di Eulero implicito e il Programma 6.8 il metodo di Crank-Nicolson. Nei Programmi 6.6 e 6.8 è chiamato il Programma 6.7, che implementa il metodo di
Newton-Raphson per risolvere ad ogni passo il sistema di equazioni algebriche non lineari.
6.5.1 Stabilità delle soluzioni
Le proprietà di stabilità delle soluzioni del sistema (6.1) possono essere studiate così come abbiamo studiato le proprietà di stabilità di una singola equazione differenziale del primo ordine. Comunque c’è una difficoltà, il teorema della media (teorema di Lagrange) non può essere esteso alle funzioni vettoriali di variabili vettoriali, (vedi Nota 5). Per questa ragione faremo ricorso ad un nuovo concetto per poter estendere a un sistema di equazioni del primo ordine l’analisi svolta nel § 6.1.
Consideriamo la classe delle funzioni f = f u;t
( )
rappresentabili nel modo seguentef = A!1g u;t
( )
(6.241)dove A è una matrice simmetrica e definita positiva e g= g u;t
( )
è una funzione continua e differenziabile per ogni u!"n e per ogni t .La funzione g= g u;t
( )
si dice monotona decrescente se per ogni x! y "#n e per ogni tg x;t
( )
! g y;t( )
"# $%T
(
x! y)
< 0 . (6.242)La funzione g si dice non monotona se esiste un dominio limitato D! "n in cui g x;t
( )
! g y;t( )
"# $%T
(
x! y)
> 0 , (6.243)e all’esterno di D vale ancora la (6.242). Per ragioni fisiche non può mai presentarsi il caso in cui g sia monotona crescente in tutto !n.
Un ruolo fondamentale è svolto dalla matrice jacobiana
Jg
( )
u = !g!u. (6.244)La condizione (6.242) è verificata se la matrice Jacobiana Jg
( )
u è definita negativa per ogni u!"n e per ogni t , [6.5]. Se Jg( )
u non è definita, allora g non è monotona. SeJg
( )
u fosse definita positiva, g sarebbe monotona crescente.Ora studieremo le proprietà di stabilità della soluzione u= u t
( )
del problema (6.1) attraverso una tecnica molto simile a quella che abbiamo impiegato per discutere il problema della stabilità di una singola equazione del primo ordine. Si consideri la differenza!u t
( )
= !u t( )
" u t( )
(6.245)tra la soluzione u t
( )
del problema (6.1) e la soluzione del problema d!udt = f !u,t
( )
,!u0 = u0+!u0.
"
#$
%$
(6.246)
Cerchiamo l’equazione che governa la differenza !u t
( )
. Sottraendo membro a membro le equazioni dei problemi (6.1), (6.246) e utilizzando la (6.241) abbiamo
Ad!u
dt = g !u,t
( )
" g u,t( )
,!u t
( )
0 =!u0.#
$%
&%
(6.247)
Moltiplichiamo a destra ambo i membri dell’equazione del problema (6.247) per !u e utilizzando la proprietà di simmetria della matrice A otteniamo
d !u A2
dt = f !u,t#$
( )
" f u,t( )
%&T!u,!u t
( )
0 A2 = !u0 A2, '
()
*) (6.248)
dove
!u A2 = 1
2!uTA!u (6.249)
è la norma indotta dalla matrice definita positiva A in !n (vedi Appendice 2).
Consideriamo, ora, due casi:
a) g u;t
( )
è monotona decrescente;b) g u;t
( )
non è monotona . Nel caso a) si had !u A2
dt < 0 per ogni !u A2 " 0,
!u t
( )
0 22 = !u0 2 2,#
$%
&
% (6.250)
quindi deve essere necessariamente
limt!" #u A2 = 0 , (6.251) e la soluzione u t
( )
è asintoticamente stabile.Nel caso b) si ha
d !u 2A
dt > 0 per ogni !u"D e d !u A2
dt < 0 altrove
!u t
( )
0 A2 = !u0 A2
#
$%
&
% (6.252)
In queste situazioni la soluzione u t
( )
è instabile perché !u A2 cresce fino a quando!u"D.
Riassumendo, abbiamo il seguente criterio di stabilità:
a) se g u;t
( )
è monotona decrescente tutte le soluzioni sono stabili;b) se g u;t
( )
non è monotona l’equazione ha soluzioni instabili.Esempio 6.19
Consideriamo il sistema di equazioni (6.237) con L= 9mH , C = 1mF , R= 1! e e= 3.76V sia nel caso in cui il resistore non lineare è un diodo a giunzione pn, sia nel caso in cui è un diodo tunnel. In entrambi i casi il circuito ha una sola soluzione stazionaria, v= V , i = I .
Posto u! v,iT, la funzione f u;t
( )
può essere scritta nella forma (6.241) conA = diag C, L
( )
(6.253)e
g u;t
( )
= !g v( )
+ i!v ! Ri + e t
( )
. (6.254)Consideriamo, ora, la matrice jacobiana di g u;t
( )
nei due casi.Diodo a giunzione pn
La matrice jacobiana Jg
( )
u ha la seguente espressioneJg
( )
u = !VITs ev /VT 1!1 !R
. (6.255)
Valutiamo, ora, la forma quadratica xTJg
( )
u x, dove x! x1, x2 T"#2. Abbiamo xTJf( )
u x= ! IsVT ev /VTx12 ! Rx2
2 < 0 . (6.256)
In questo caso, allora, tutte le soluzioni sono asintoticamente stabili.
Diodo tunnel
La matrice jacobiana Jg
( )
u ha la seguente espressione Jg( )
u = ! 3a(
3v2 + 2a2v+ a1)
1!1 !R (6.257)
dove i coefficienti a1, a2 e a3 sono dati nell’Esempio 6.3. La forma quadratica
xTJf
( )
u x= ! 3a(
3v2+ 2a2v+ a1)
x12 ! Rx22 (6.258)può essere positiva. In questo caso, il circuito può avere soluzioni instabili. In particolare, la soluzione stazionaria U= V, I T è instabile.
Esercizio 6.13
Determinare attraverso uno dei metodi descritti nella Nota 5 la soluzione stazionaria U= V, IT del circuito di Figura 6.12, assumendo per i parametri i valori assegnati nell’Esempio 6.19, sia nel caso in cui il resistore non lineare è un diodo a giunzione pn, sia nel caso in cui è un diodo tunnel.
♦ Esercizio 6.14
Studiare la stabilità delle soluzioni stazionarie U= V, IT determinate nell’esercizio precedente linearizzando il sistema di equazioni (6.237) nell’intorno di U .
♦
6.5.2 Stabilità numerica
Per studiare la stabilità numerica procediamo come al solito. Consideriamo la sequenza
u( )1, u( )2,... (6.259)
generata dalla condizione iniziale u( )0 , e la sequenza
!u( )1,!u( )2,... (6.260) generata dalla condizione iniziale !u( )0 = u( )0 +!u( )0 con !u( )0 << u( )0 . Posto
!u( )k = !u( )k " u( )k (6.261) analizzeremo la dinamica di !u( )k nelle situazioni in cui !u( )k << u( )k . Sotto queste condizioni, ignorando termini del secondo ordine, abbiamo (vedi Nota 5)
f
(
!u( )k;tk)
! f u(
( )k;tk)
" Jf(
u( )k;tk)
#u( )k . (6.262)E’ immediato verificare che
Jf = A!1Jg. (6.263)
E’ importante per il seguito studiare le proprietà degli autovalori di Jf. Gli autovalori !h, h= 1,2,...,n , di Jf e i corrispondenti autovettori wh, h= 1,2,...,n , sono soluzione del problema
Jgwh =!hAwh per h= 1,2,...,n . (6.264) In generale, gli autovalori saranno reali o complessi coniugati.
Se !h è reale anche il corrispondente autovettore wh è reale. Premoltiplicando ambo i membri della (6.264) per whT si ha
!h = whTJgwh whTAwh
. (6.265)
Essendo A definita positiva, dalla (6.265) segue che !h è negativo se Jg è definita negativa, ovvero se g è monotona decrescente, altrimenti può essere positivo.
Consideriamo, ora, il caso in cui !h è complesso, anche il corrispondente autovettore wh è complesso. Premoltiplicando ambo i membri della (6.264) per il complesso coniugato di whT! si ha
!h = whT"Jgwh
whT"Awh . (6.266)
Essendo A simmetrica e definita positiva si ha che whT!Awh è reale e maggiore di zero.
Se Jg è definita negativa si ha che Re w
{
hT!Jgwh}
< 0 , mentre se definita positiva si ha che Re w{
hT!Jgwh}
> 0 . Di conseguenza, se g è monotona decrescente si ha cheRe
{ }
!h < 0, altrimenti può essere Re{ }
!h > 0.In conclusione se la funzione g è monotona decrescente gli autovalori della matrice jacobiana della funzione f hanno parte reale minore di zero, mentre se g è monotona crescente in qualche regione del dominio di definizione allora gli autovalori possono avere parte reale maggiore di zero.
6.5.2.1 Metodo di Eulero esplicito
Per il metodo di Eulero esplicito abbiamo
u(k+1) = u( )k + !tf u
(
( )k;tk)
(6.267)e
!u(k+1) = !u( )k + !tf !u
(
( )k;tk)
. (6.268)Sottraendo membro a membro, utilizzando le (6.262), (6.263) e ignorando termini di ordine O
( )
!u( )k 2 otteniamo!u(k+1) " I + #tJ
(
( )fk)
!u( )k (6.269)dove Jf
( )k = Jf
(
u( )k;tk)
.Se g è monotona decrescente gli autovalori di J( )fk ad ogni passo hanno parte reale minore di zero. Allora, il passo di discretizzazione !t deve essere scelto in modo tale che il cerchio di raggio 1 /!t con centro nel punto (!1 / "t,0) del piano complesso contenga tutti gli autovalori di J( )fk affinché anche la soluzione numerica sia asintoticamente stabile. Invece, se in qualche regione del dominio di definizione g è monotona crescente,
Jf ha autovalori con parte reale positiva e la soluzione numerica è instabile per ogni
!t > 0. Come nel caso di una singola equazione, il metodo Eulero implicito preserva naturalmente le proprietà di stabilità delle soluzioni instabili.
6.5.2.2 Metodo di Eulero implicito
Per il metodo di Eulero implicito abbiamo
u(k+1)! "tf u
(
(k+1);tk+1)
= u( )k (6.270)e
!u(k+1)! "tf !u
(
(k+1);tk+1)
= !u( )k . (6.271)Sottraendo membro a membro, utilizzando la (6.262) e ignorando termini di ordine O
( )
!u( )k 2 otteniamoI! "tJ(fk+1)
( )
#u(k+1) $#u( )k . (6.272)Se g è monotona decrescente gli autovalori di Jf
( )k ad ogni passo hanno parte reale minore di zero. Allora, la soluzione numerica è asintoticamente stabile per ogni !t. Se Jf ha autovalori con parte reale positiva la soluzione numerica è instabile solo se il cerchio di raggio 1 /!t con centro nel punto (+1 / !t,0) del piano complesso li contiene.
Come nel caso di una singola equazione, il metodo Eulero implicito preserva naturalmente le proprietà di stabilità delle soluzioni asintoticamente stabili.
6.5.2.2 Metodo di Crank-Nicolson
Per il metodo di Crank-Nicolson abbiamo u(k+1)! "t
2 f u
(
(k+1);tk+1)
= u( )k +"t2 f u(
( )k;tk)
(6.273)e
!u(k+1)! "t
2 f
(
!u(k+1);tk+1)
= !u( )k + "t2 f(
!u( )k;tk)
. (6.274)Sottraendo membro a membro, utilizzando la (6.262) e ignorando termini di ordine O
( )
!u( )k 2 otteniamoI!"t 2 Jf(k+1)
#$% &
'( )u(k+1) * I +"t 2 Jf( )k
#$% &
'( )u( )k . (6.275)
Se g è monotona decrescente gli autovalori di J( )fk ad ogni passo hanno parte reale minore di zero. Allora, la soluzione numerica è asintoticamente stabile per ogni !t. Invece, se Jf ha autovalori con parte reale positiva la soluzione numerica è instabile per ogni !t. Come nel caso di una singola equazione, il metodo di Crank-Nicolson preserva naturalmente le proprietà di stabilità di tutte le soluzioni del problema, sia di quelle asintoticamente stabili, sia di quelle stabili, sia di quelle instabili.
Esempio 6.20
Risolviamo il sistema di equazioni (6.237) nel caso in cui il resistore non lineare sia il diodo tunnel, con L= 9mH , C = 1mF , R= 1! e e= 3.76V . Come abbiamo già visto precedentemente, il circuito in questo caso ha una sola soluzione stazionaria, che è instabile.
0 0,5 1 1,5 2 2,5 3
0 0,02 0,04 0,06 0,08 0,1
v [V]
t (s) i [A]
Figura 6.15
In Figura 6.15 riportiamo gli andamenti della tensione v e dell’intensità di corrente i ottenuti attraverso il metodo di Eulero esplicito, il metodo di Eulero implicito e il metodo di Crank-Nicolson con T = 0.1s , N = 1000 (quindi !t = 10"4s ). Sono praticamente indistinguibili. Con N = 100 (quindi !t = 10"3s ) il metodo di Eulero esplicito dà una soluzione numericamente instabile, che diverge. Il metodo di Eulero implicito dà una soluzione limitata, ma essa è molto diversa da quella ottenuta con N = 1000 . Invece, la soluzione ottenuta con il metodo di Crank-Nicolson è praticamente indistinguibile da