• Non ci sono risultati.

Metodo di Eulero esplicito function [t,u]=eulesp(t0,T,N,y0)

% 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 seguente

f = 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 t

g 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. Se

Jg

( )

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!u

dt = 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 A

2, '

()

*) (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 ha

d !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 A

2 = !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) con

A = 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 espressione

Jg

( )

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= ! Is

VT 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 che

Re

{ }

!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 otteniamo

I! "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 otteniamo

I!"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

Documenti correlati