21.07.2014 Views

( ) ( ) 0 ( )n ( ) 0 - Sisteme de Programare pentru Modelare si Simulare

( ) ( ) 0 ( )n ( ) 0 - Sisteme de Programare pentru Modelare si Simulare

( ) ( ) 0 ( )n ( ) 0 - Sisteme de Programare pentru Modelare si Simulare

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

15. REZOLVAREA NUMERICǍ A ECUAŢIILOR<br />

DIFERENŢIALE<br />

15.1. Ecuaţii diferenţiale. Soluţia generală. Soluţii particulare<br />

Istoric, ecuaţiile diferenţiale au apărut din nece<strong>si</strong>tatea mo<strong>de</strong>lării matematice a<br />

fenomenelor din fizică, chimie şi inginerie. Mai recent, aceste ecuaţii diferenţiale apar în<br />

mo<strong>de</strong>lele din medicină, biologie, antropologie şi calculul probabilităţilor.<br />

O ecuaţie diferenţială este o ecuaţie care conţine funcţia şi una sau mai multe<br />

<strong>de</strong>rivate ale acesteia. Ecuaţia este o ecuaţie diferenţială ordinară (ODE), dacă funcţia<br />

necunoscută <strong>de</strong>pin<strong>de</strong> numai <strong>de</strong> o variabilă in<strong>de</strong>pen<strong>de</strong>ntă.<br />

Câteva exemple <strong>de</strong> ecuaţii diferenţiale ordinare (ODE) sunt,<br />

du<br />

• ecuaţia creşterii: = F( t)<br />

⋅G(<br />

t)<br />

;<br />

dt<br />

2<br />

d θ g<br />

• ecuaţia pendulului: + ⋅<strong>si</strong>n(<br />

θ)<br />

= F(<br />

t)<br />

;<br />

2<br />

dt l<br />

d<br />

• ecuaţia van <strong>de</strong>r Pol: + ε ⋅( y + 1) ⋅ + y = 0<br />

2<br />

dt<br />

y<br />

2<br />

2<br />

2<br />

d Q dQ E<br />

• ecuaţia oscilatorului LRC: L ⋅ + R ⋅ + = E(<br />

t)<br />

;<br />

2<br />

dt dt C<br />

dy<br />

2<br />

• ecuaţia Riccati: + P(<br />

x)<br />

⋅ y + Q(<br />

t)<br />

⋅ y + R(<br />

t)<br />

= 0 sau<br />

dt<br />

dy<br />

2<br />

+ P(<br />

x)<br />

⋅ y + Q(<br />

t)<br />

⋅ y + R(<br />

t)<br />

= 0<br />

dt<br />

în care: t este variabila in<strong>de</strong>pen<strong>de</strong>ntă, iar u ,θ,<br />

y,<br />

Q,<br />

p , sunt variabilele <strong>de</strong>pen<strong>de</strong>nte.<br />

O ecuaţie diferenţială <strong>de</strong> ordinul n, este o relaţie <strong>de</strong> forma,<br />

( n)<br />

F( x, y,<br />

y′ , L , y ) = 0 ,<br />

( n)<br />

în care n se numeşte ordinul ecuaţiei diferenţiale, F ( x, y,<br />

y′ , L,<br />

y ) este o funcţie<br />

n+<br />

1<br />

reală <strong>de</strong>finită pe [ a , b] × Y,<br />

Y ⊂ R , având argumente variabila reală x ∈ [ a,<br />

b]<br />

, iar<br />

( n)<br />

y este o funcţie reală, având <strong>de</strong>rivate până la gradul n, y ′, y′′<br />

, L,<br />

y .<br />

O ecuaţie diferenţială se spune că este <strong>de</strong> ordin superior, dacă ordinul său, n, este<br />

mai mare sau egal cu 2.<br />

O funcţie y = ϕ( x)<br />

, <strong>de</strong>rivabilă <strong>de</strong> n ori pe [ a , b]<br />

, se numeşte soluţie pe [ a , b]<br />

,<br />

dacă verifică ecuaţia,<br />

n<br />

F x, ϕ x , ϕ′ x , L , ϕ x =<br />

(<br />

( ( ) ( ) )<br />

( )) 0<br />

dy<br />

dt<br />

;


Rezolvarea numerică a ecuaţiilor diferenţiale 301<br />

<strong>pentru</strong> orice x ∈ [ a,<br />

b]<br />

.<br />

Funcţia ( x , C1,<br />

C2,<br />

L,<br />

C n )<br />

( n)<br />

n, F x, y,<br />

y′ , L , y = , studiată într-un domeniu D ⊃ [ x,<br />

y]<br />

ϕ este soluţia generală a ecuaţiei diferenţiale <strong>de</strong> ordinul<br />

( ) 0<br />

ecuaţiei şi dacă, prin alegerea convenabilă a constantelor<br />

( x C , C , , )<br />

, dacă ϕ este o soluţie a<br />

C ,<br />

1, C2 , L Cn<br />

, funcţia<br />

ϕ , 1 2 L C n , se transformă în orice soluţie a ecuaţiei diferenţiale, al cărui grafic<br />

se află în domeniul D. Soluţia generală a unei ecuaţii diferentiale se numeşte şi integrală<br />

generală a ecuaţiei con<strong>si</strong><strong>de</strong>rate.<br />

Soluţia generală a unei ecuaţii diferenţiale <strong>de</strong> ordinul n, poate fi dată şi :<br />

• implicit, printr-o relaţie <strong>de</strong> forma R( x, y,<br />

C1 , C2,<br />

L , C n ) = 0 , care<br />

este <strong>de</strong>numită, <strong>de</strong> obicei, integrală generală;<br />

⎧ x = ϕ( t,<br />

C1,<br />

C2,<br />

L,<br />

Cn<br />

)<br />

• parametric, printr-un <strong>si</strong>stem ⎨<br />

.<br />

⎩y<br />

= ψ( t,<br />

C1,<br />

C2,<br />

L,<br />

Cn<br />

)<br />

( n)<br />

Se numeşte soluţie particulară a ecuaţiei diferenţiale F( x, y,<br />

y′ , L , y ) = 0 , o<br />

*<br />

funcţie y = ϕ ( x)<br />

, x ∈ [ a,<br />

b]<br />

şi ( x y) ∈ D<br />

, , care se obţine din soluţia generală, dând<br />

valori particulare constantelor C 1, C2 , L , Cn<br />

. Graficul unei soluţii particulare este o<br />

curbă plană, numită curbă integrală.<br />

Se numeşte integrală intermediară a ecuaţiei diferenţiale <strong>de</strong> ordinul n,<br />

( n)<br />

F( x, y,<br />

y′ , L , y ) = 0 , o ecuaţie diferenţială <strong>de</strong> ordin n − k , care conţine k ≥ 1<br />

( n−k<br />

)<br />

constante arbitrare, Ψ( x, y,<br />

y′<br />

, L , y , C1 , C2,<br />

L,<br />

Ck<br />

) = 0 şi care este verificată <strong>de</strong><br />

integrala generală. În particular, dacă k = 1, obţinem integrala primă, având forma<br />

( n−1)<br />

Φ( x,<br />

y,<br />

y′<br />

, L , y , C) = 0 .<br />

Cunoaşterea unei integrale intermediare <strong>si</strong>mplifică rezolvarea ecuaţiei iniţiale<br />

<strong>de</strong>oarece, în acest caz, ecuaţia ce trebuie rezolvată este <strong>de</strong> ordin mai mic, anume n − k .<br />

În particular, cunoaşterea a n integrale prime, distincte, este echivalentă cu cunoaşterea<br />

soluţiei generale.<br />

Operatorul linear, specific ecuaţiilor diferenţiale este <strong>de</strong>finit ca<br />

n<br />

n-1<br />

d<br />

d<br />

d<br />

Ln = a0 ( x) ⋅ + a ( x) ⋅ + + an<br />

( x) ⋅ + an<br />

( x)<br />

n 1<br />

L<br />

n−<br />

1<br />

−1<br />

d x d x<br />

d x<br />

şi are următoarele proprietăţi :<br />

L y + y = L y L ;<br />

[ 1 2 ] n[ 1] n [ y2<br />

]<br />

[ C ⋅ y] = C ⋅ L [ y] , C const.<br />

n +<br />

L<br />

n<br />

O ecuaţie <strong>de</strong> forma<br />

n<br />

a x ⋅ y + a x ⋅ y<br />

se numeşte ecuaţie diferenţială <strong>de</strong> ordinul n, lineară şi neomogenă.<br />

O ecuaţie <strong>de</strong> forma<br />

n =<br />

( ) ( n−1) ( ) ( ) + L + a ( x) ⋅ y′<br />

+ a ( x) ⋅ y = f ( x) ⇔ L ( y)<br />

= f ( )<br />

0 1<br />

n−1<br />

n<br />

n x


302<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

( n) ( n−1) ( x) ⋅ y + a ( x) ⋅ y + + a ( x) ⋅ y′<br />

+ a ( x) ⋅ y = 0 ⇔ L ( y)<br />

0<br />

a0 1 L n−1<br />

n<br />

n = ,<br />

se numeşte ecuaţie diferenţială <strong>de</strong> ordinul n, lineară şi omogenă.<br />

Pentru o ecuaţie diferenţială <strong>de</strong> ordinul n,<br />

( n)<br />

F( x, y,<br />

y′ , L , y ) = 0<br />

nu este întot<strong>de</strong>auna necesar să se găsească soluţia generală, <strong>de</strong>oarece o ecuaţie dată,<br />

corespun<strong>de</strong> unui anumit fenomen fizic.<br />

O anumită soluţie a ecuaţiei diferenţiale, care <strong>de</strong>scrie un fenomen fizic concret,<br />

trebuie să verifice atât ecuaţia, cât şi să în<strong>de</strong>plinească anumite condiţii, care o <strong>de</strong>termină<br />

în mod unic. Sunt două tipuri <strong>de</strong> condiţii : condiţii iniţiale, care apar în problemele<br />

numite, probleme cu valori iniţiale (IVP – initial value problem) şi condiţii la margine,<br />

care apar în problemele la limită (BVP – boundary value problem).<br />

În general, se cere o soluţie a ecuaţiei date, astfel încât <strong>pentru</strong> x = x0<br />

, funcţia y şi<br />

( n−1)<br />

<strong>de</strong>rivatele ei y,<br />

y′ , L , y , să ia valori date dinainte a0 , a1,<br />

L , a n −1<br />

,<br />

( n−1)<br />

y( x0 ) = a0,<br />

y′<br />

( x0<br />

) = a1,<br />

L , y ( x0<br />

) = an−1<br />

,<br />

Problema <strong>de</strong>terminării soluţiei y(x), care în<strong>de</strong>plineşte aceste condiţii iniţiale se<br />

numeşte problema lui Cauchy. Pentru o ecuaţie diferenţială lineară <strong>de</strong> ordinul n,<br />

omogenă, există o <strong>si</strong>ngură soluţie y(x), care în punctul x 0 ∈ [ a,<br />

b]<br />

, satisface<br />

condiţiile iniţiale. Soluţia unei ecuaţii diferenţiale neomogene se obţine, adăugând<br />

la soluţia ecuaţiei omogene, o soluţie particulară (oarecare) a ecuţiei neomogene.<br />

Problemele practice <strong>de</strong> rezolvare a ecuaţiilor diferenţiale cu condiţiile iniţiale pot fi<br />

grupate astfel:<br />

• probleme cu valori iniţiale, la care se cunosc valorile funcţiilor y i , în zona <strong>de</strong><br />

început a domeniului <strong>de</strong> <strong>de</strong>finiţie, rezolvarea acestora furnizând informaţii<br />

<strong>de</strong>spre comportamentul funcţiilor y i , în zona <strong>de</strong> sfârşit a domeniului <strong>de</strong><br />

<strong>de</strong>finiţie;<br />

• probleme cu valori iniţiale şi finale, în care sunt cunoscute valorile funcţiilor<br />

y i , în zonele <strong>de</strong> început şi sfârşit ale domeniului <strong>de</strong> <strong>de</strong>finiţie, rezolvarea<br />

completând informaţiile referitoare la aceste funcţii, în zonele din<br />

interiorul domeniului <strong>de</strong> <strong>de</strong>finiţie.<br />

Orice ecuaţie diferenţială <strong>de</strong> ordin superior poate fi transformată în seturi <strong>de</strong><br />

ecuaţii diferenţiale <strong>de</strong> ordinul întâi, dacă se face schimbarea <strong>de</strong> variabilă D’Alambert-<br />

Euler, y ′ = p(x)<br />

, un<strong>de</strong> p(x) este funcţia necunoscută, iar y este variabila in<strong>de</strong>pen<strong>de</strong>ntă<br />

y = y( p) .<br />

Pentru cazul ecuaţiei diferenţiale <strong>de</strong> ordinul doi care are forma generală<br />

y ′′ + m( x) y′<br />

= n(x)<br />

,<br />

efectuarea schimbării <strong>de</strong> variabile duce la stabilirea relaţiilor :


Rezolvarea numerică a ecuaţiilor diferenţiale 303<br />

dp<br />

y ′ = p(x) , = n(<br />

x)<br />

− m(<br />

x)<br />

⋅ p ⇔ p′<br />

= n(<br />

x)<br />

− m(<br />

x)<br />

⋅ p ,<br />

dp<br />

un<strong>de</strong> m(x) şi n(x) , sunt funcţii oarecare cunoscute.<br />

Generalizând, <strong>pentru</strong> cazul unei ecuaţii sau <strong>si</strong>stem <strong>de</strong> ecuaţii <strong>de</strong> gradul n,<br />

schimbarea <strong>de</strong> variabile, aplicată secvenţial, produce modificarea <strong>si</strong>stemului până la<br />

forma generală,<br />

y′ = q x y , y , L , y , i = 1, ,<br />

( ) n<br />

i , 1 2 n L,<br />

un<strong>de</strong>, funcţiile q i , sunt con<strong>si</strong><strong>de</strong>rate cunoscute.<br />

Problemele care se reduc la ecuaţii diferenţiale ordinare <strong>de</strong> ordinul întâi sunt, în<br />

mod necesar, <strong>de</strong> tipul problemelor cu condiţii iniţiale, care sunt extrem <strong>de</strong> numeroase în<br />

calculele inginereşti.<br />

Ecuaţia fundamentală a dinamicii punctului material are forma vectorială,<br />

M ⋅ a = F<br />

un<strong>de</strong> a este acceleraţia punctului <strong>de</strong> masă M, iar F este rezultanta forţelor care<br />

lucrează asupra punctului con<strong>si</strong><strong>de</strong>rat.<br />

În cazul punctului material care <strong>de</strong>scrie o dreaptă, pe care o luăm ca axă Ox,<br />

ecuaţia <strong>de</strong> mişcare <strong>de</strong>vine,<br />

2<br />

d x ⎛ dx<br />

⎞<br />

M ⋅ = X ⎜ x,<br />

, t ⎟ ,<br />

2<br />

d t ⎝ d t ⎠<br />

un<strong>de</strong> X, este componenta forţei F după axa Ox, care <strong>de</strong>pin<strong>de</strong>, în general, <strong>de</strong><br />

poziţia punctului mobil, <strong>de</strong> viteza lui şi <strong>de</strong> timp. Aceasta este o ecuaţie diferenţială<br />

<strong>de</strong> ordinul al doilea.<br />

Dacă X nu <strong>de</strong>pin<strong>de</strong> <strong>de</strong> poziţia punctului x, atunci ecuaţia <strong>de</strong> mişcare <strong>de</strong>vine,<br />

2<br />

d x ⎛ dx<br />

⎞<br />

dx<br />

M ⋅ = X ⎜ , t ⎟ şi cu substituţia v = , ecuaţia se transformă în,<br />

2<br />

d t ⎝ d t ⎠<br />

d t<br />

dv<br />

notatii<br />

M ⋅ = X ( v,<br />

t) ←⎯ cu alte ⎯⎯⎯ → M ⋅ y′<br />

= F(<br />

y,<br />

t)<br />

, adică o ecuaţie diferenţială <strong>de</strong> gradul<br />

d t<br />

întâi. De aici mai rezultă că, reciproc, orice ecuaţie diferenţială <strong>de</strong> gradul (ordinul) întâi<br />

reprezintă o anumită mişcare a unui punct material.<br />

Prin urmare, un <strong>si</strong>stem <strong>de</strong> ecuaţii diferenţiale ordinare <strong>de</strong> ordinul întâi, se poate<br />

prezenta sub forma,<br />

dy(<br />

t)<br />

M ⋅ = F(<br />

t,<br />

y)<br />

⇔ M ⋅ y′<br />

= F(<br />

y,<br />

t)<br />

,<br />

dt<br />

şi <strong>de</strong> cele mai multe ori, matricea M este normalizată, M=1, astfel că, forma cea<br />

mai frecventă este:<br />

dy(<br />

t)<br />

= F(<br />

t,<br />

y)<br />

⇔ y′<br />

= F(<br />

y,<br />

t)<br />

.<br />

dt


304<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

15.2. Rezolvarea numerică a ecuaţiilor difenţiale ordinare<br />

(ODE)<br />

Soluţia analitică a ecuaţiei difereţiale M ⋅ y′<br />

= F( y,<br />

t)<br />

, poate fi obţinută doar în<br />

unele cazuri <strong>si</strong>mple, <strong>pentru</strong> majoritatea <strong>si</strong>tuaţiilor aceasta obţinându-se cu mare<br />

dificultate. Din acest motiv, se caută meto<strong>de</strong> mai uşoare, care să conducă la gă<strong>si</strong>rea<br />

soluţiei.<br />

La ora actuală, se cunosc trei categorii <strong>de</strong> medo<strong>de</strong> <strong>pentru</strong> rezolvarea ecuaţiilor<br />

diferenţiale ordinare cu condiţii iniţiale, respectiv:<br />

• meto<strong>de</strong> analitice, prin care se obţin aşa numitele soluţii închise;<br />

• meto<strong>de</strong> bazate pe convertirea ecuaţiei diferenţiale în ecuaţie cu<br />

diferenţe finite <strong>de</strong> ordinul întâi, căreia i se caută soluţia analitică<br />

sau o soluţie pseudo-închisă;<br />

• integrarea numerică a ecuaţiei diferenţiale, care apelează la<br />

meto<strong>de</strong> numerice şi conduce la soluţii numerice, numite şi soluţii<br />

<strong>de</strong>schise.<br />

Meto<strong>de</strong>le numerice <strong>de</strong> rezolvare a ecuaţiilor diferenţiale pot fi divizate în două<br />

clase:<br />

• meto<strong>de</strong> monopas sau meto<strong>de</strong> <strong>de</strong> autopornire, la care,<br />

comportamentul funcţiei la pasul curent este obţinut din<br />

comportamentul funcţiei la pasul prece<strong>de</strong>nt, care, <strong>pentru</strong> început,<br />

rezultă din condiţia iniţială y ( t 0 ) = y 0 ;<br />

• meto<strong>de</strong> multipaşi sau meto<strong>de</strong> <strong>de</strong> continuare, la care este necesară<br />

cunoaşterea funcţiei y în punctele prece<strong>de</strong>nte punctului în care se<br />

caută soluţia şi, <strong>pentru</strong> aceasta, este necesară utilizarea <strong>pentru</strong><br />

început, a unei meto<strong>de</strong> monopas.<br />

Practic, soluţiile numerice ale ecuaţiilor diferenţiale se bazează pe <strong>de</strong>zvoltarea în<br />

serie Taylor a funcţiei.<br />

Pentru o problemă care se reduce la rezolvarea unei ecuaţii diferenţiale <strong>de</strong> forma:<br />

y ′ = F( y,<br />

t)<br />

,<br />

cu condiţia iniţială y ( t 0 ) = y 0 , <strong>de</strong>zvoltarea în serie Taylor a funcţiei y (t ) , în t = t 0<br />

este<br />

y ′′ ( t0<br />

)<br />

2 y′′′<br />

( t0<br />

) 3<br />

y ( t)<br />

= y(<br />

t0<br />

) + y′<br />

( t0<br />

) ⋅( t − t0<br />

) + ⋅( t − t0<br />

) + ⋅( t − t0<br />

) + L .<br />

2!<br />

3!<br />

Valoarea funcţiei, y n+ 1 , la momentul t n+ 1, în funcţie <strong>de</strong> valoarea funcţiei, y n , la<br />

momentul t n este<br />

yn′′<br />

2 y′′′<br />

n 3<br />

yn + 1 = yn<br />

+ y′<br />

n ⋅ h + ⋅ h + ⋅ h +L,<br />

2! 3!


Rezolvarea numerică a ecuaţiilor diferenţiale 305<br />

un<strong>de</strong> h = t n+1 −tn<br />

.<br />

Exemple tipice <strong>de</strong> meto<strong>de</strong> monopas sunt meto<strong>de</strong>le Euler şi Runge Kutta. În metoda<br />

Runge-Kutta, soluţia la pasul t n+ 1 este obţinută funcţie <strong>de</strong> y n , F ( t n,<br />

y n ) , iar F(t,y) este<br />

evaluată la paşi intermediari între t n şi t n+ 1, exclu<strong>si</strong>v. Creşterea preciziei se datorează<br />

numărului mai mare <strong>de</strong> puncte în care se evaluează F, faţă <strong>de</strong> cazul seriei Taylor, când se<br />

evalua doar în punctul t n . Toate meto<strong>de</strong>le monopas sunt explicite.<br />

Meto<strong>de</strong>le multipas, care au o precizie mai mare, nece<strong>si</strong>tă cunoaşterea valorilor<br />

y n−1, yn−2 ,L şi F n−1 , Fn−2 , L. Se disting meto<strong>de</strong> explicite şi implicite. Dacă F este o<br />

funcţie nelineară <strong>de</strong> y, <strong>pentru</strong> a obţine soluţia la fiecare pas, meto<strong>de</strong>le implicite nece<strong>si</strong>tă<br />

rezolvarea unor <strong>si</strong>steme <strong>de</strong> ecuaţii nelineare, crescând timpul <strong>de</strong> calcul, dar a<strong>si</strong>gură<br />

avantajul stabilităţii numerice a soluţiei.<br />

15.2.1. Concepte analitice<br />

Pentru rezolvarea numerică a ecuaţiilor diferenţiale ordinare (ODE), este uzuală<br />

cla<strong>si</strong>ficarea acestora în :<br />

• ecuaţii <strong>de</strong> ordinul întâi - ecuaţii <strong>de</strong> ordin superior;<br />

• o <strong>si</strong>ngură ecuaţie - <strong>si</strong>steme <strong>de</strong> ecuaţii;<br />

• lineare<br />

- nelineare;<br />

• autonome<br />

- neautonome sau cuplate;<br />

• omogene<br />

- neomogene;<br />

• valori iniţiale - valori la limită.<br />

În continuare, se va face analiza acestor categorii analitice, din punctul <strong>de</strong> ve<strong>de</strong>re al<br />

influenţării meto<strong>de</strong>lor <strong>de</strong> calcul.<br />

Aproape orice ODE <strong>de</strong> ordin superior, <strong>pentru</strong> început, se reduce la un <strong>si</strong>stem <strong>de</strong><br />

ecuaţii diferenţiale ordinare <strong>de</strong> primul ordin. Dacă avem o ecuaţie <strong>de</strong> ordinul n,<br />

( n)<br />

( n−1)<br />

y = f ( t,<br />

y,<br />

y′<br />

, L , y )<br />

şi notăm<br />

( i−1)<br />

yi = y , i = 1,2, L,<br />

n ,<br />

putem scrie:<br />

′<br />

y = y<br />

′<br />

y = f ( t,<br />

y , L , y ) i = 1,2, L,<br />

1.<br />

i<br />

i+ 1, n<br />

1 n<br />

n −<br />

′<br />

Pentru <strong>si</strong>steme neautonome, y 0 = t şi atunci y 0 = 1. Pentru <strong>si</strong>stemele autonome,<br />

′<br />

y = g ( y ), i = 1,2, L , n i = 1,2, L n<br />

i i i<br />

,<br />

0 ( y i ) =<br />

un<strong>de</strong> g 1.<br />

În acest mod, <strong>si</strong>stemele <strong>de</strong> ecuaţii <strong>de</strong> ordin superioar se transformă în <strong>si</strong>steme <strong>de</strong><br />

ecuaţii <strong>de</strong> primul ordin, după izolarea <strong>de</strong>rivatei <strong>de</strong> ordin superior şi tratarea acesteia, în<br />

sensul înlocuirii cu o ecuaţie sau <strong>si</strong>stem <strong>de</strong> ordinul întâi.


306<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

Meto<strong>de</strong>le <strong>de</strong> calcul a <strong>si</strong>stemelor lineare şi nelineare nu sunt foare diferite, dar, în<br />

mod uzual, timpul <strong>de</strong> calcul aferent <strong>si</strong>stemelor nelineare este con<strong>si</strong><strong>de</strong>rabil mai mare.<br />

Pentru a creşte viteza <strong>de</strong> calcul, <strong>si</strong>stemele <strong>de</strong> ecuaţii nelineare se linearizează,<br />

y′<br />

= B + A ⋅ y<br />

un<strong>de</strong><br />

i<br />

i<br />

ij<br />

j<br />

A ij este o matrice costantă <strong>de</strong> (n+1) x (n+1), iar<br />

B i este un vector constant <strong>de</strong><br />

lungime n+1. Sistemul linearizat se revolvă şi apoi, cu noile valori ale lui<br />

A ij şi<br />

se repetă liniarizarea, până când se în<strong>de</strong>plineşte condiţia <strong>de</strong> acurateţe.<br />

Distincţia dintre ODE omogene şi neomogene este fără importanţă <strong>pentru</strong> calculele<br />

numerice, cu excepţia problemelor cu condiţii la margine. Termenul neomogen este<br />

important <strong>pentru</strong> a obţine soluţia corectă şi, relativ neimportant, în stabilitatea numerică şi<br />

−1<br />

acurateţea analizei. În multe cazuri, utilizând transformarea x = y + A ⋅ B , ecuaţia<br />

diferenţială se transformă în ecuaţia omogenă<br />

analizei, este un <strong>si</strong>stem linear, omogen<br />

Con<strong>si</strong><strong>de</strong>rând că<br />

y<br />

i<br />

= A ⋅ y .<br />

Aij<br />

are n+1 valori proprii,<br />

diagonală a valorilor proprii şi matricea<br />

z′ = λ ⋅ z , i = 0,1,2, n .<br />

i ( i)<br />

i L,<br />

ij<br />

i<br />

ij<br />

j<br />

i<br />

j<br />

jk<br />

k<br />

B i ,<br />

x′ = A ⋅ x , care, <strong>pentru</strong> generalizarea<br />

j<br />

λ ( i ) , i = 0,1,2, L,<br />

n că Aij<br />

este matricea<br />

S ij , a vectorilor proprii, atunci<br />

z<br />

i<br />

−1<br />

ik<br />

= S y şi<br />

Deci, cu excepţia ecuaţiilor rigi<strong>de</strong> (stiffness), <strong>pentru</strong> ecuaţiile <strong>de</strong> ordin superior sau<br />

<strong>si</strong>stemele <strong>de</strong> ecuaţii, meto<strong>de</strong>le <strong>de</strong> rezolvare şi analiza acestora sunt <strong>si</strong>milare celor <strong>pentru</strong> o<br />

<strong>si</strong>ngură ecuaţie <strong>de</strong> ordinul întâi. De notat că soluţiile unui <strong>si</strong>stem linear sunt<br />

t<br />

i )<br />

zi<br />

= e<br />

λ (<br />

ci<br />

, i = 0,1,2, Ln<br />

sau, funcţie <strong>de</strong> <strong>de</strong>pen<strong>de</strong>nţa originală a variabilelor,<br />

λ t<br />

i Sik<br />

zk<br />

Sike<br />

(<br />

λ( 0 )<br />

t<br />

λ(1)<br />

t<br />

λ(<br />

n )<br />

t<br />

= = ci<br />

sau zi<br />

Si0e<br />

c0<br />

+ Si1e<br />

c1<br />

+ + Sine<br />

cn<br />

i )<br />

z = L .<br />

Condiţiile iniţiale, valori iniţiale sau valori la margine sau pe frontieră, sunt foarte<br />

importante <strong>pentru</strong> alegerea meto<strong>de</strong>lor <strong>de</strong> rezolvare. Deoarece câteva meto<strong>de</strong> utilizate<br />

<strong>pentru</strong> rezolvarea problemelor pe frontieră se bazează pe problemele cu valori iniţiale,<br />

vom analiza <strong>pentru</strong> început problemele cu valori iniţiale.<br />

15.2.2. Concepte numerice<br />

În analiza diverselor meto<strong>de</strong> utilizate în rezolvarea ecuaţiilor diferenţiale ordinare<br />

sunt folo<strong>si</strong>te următoarele concepte numerice:<br />

• acurateţea - corespun<strong>de</strong> erorilor globale <strong>de</strong> trunchiere, care pot fi <strong>de</strong><br />

amplitudine sau <strong>de</strong> fază;<br />

• rigiditatea (stiffness) - dificultăţile <strong>de</strong> integrare a <strong>si</strong>stemelor <strong>de</strong> ecuaţii sau<br />

ecuaţiilor <strong>de</strong> ordin mare, atunci când raportul dintre cea mai mare<br />

valoare proprie şi cea mai mică valoare proprie este foarte mare;<br />

• stabilitatea – asociată menţinerii soluţiei la o valoare finită, <strong>pentru</strong> orice<br />

k


Rezolvarea numerică a ecuaţiilor diferenţiale 307<br />

pas al calculului şi, din acest punct <strong>de</strong> ve<strong>de</strong>re, putem avea:<br />

schemă numerică stabilă – soluţiile numerice rămân finite, la orice<br />

modificare a pasului <strong>de</strong> timp;<br />

schemă numerică instabilă – soluţiile numerice sar la valori infinite, la<br />

orice modificare a pasului;<br />

schemă numerică condiţionată stabil – soluţiile numerice rămân finite,<br />

la o modificare în limite reduse a pasului;<br />

• convergenţa – atunci când soluţiile ecuaţiilor numerice se apropie <strong>de</strong><br />

soluţia exactă, o dată ce dimen<strong>si</strong>unea intervalului h tin<strong>de</strong> spre zero,<br />

dar nu este obligatoriu să se găsească soluţia exactă ;<br />

• con<strong>si</strong>stenţa – atunci când diferenţa dintre soluţia exactă şi numerică tin<strong>de</strong><br />

spre zero, in<strong>de</strong>pen<strong>de</strong>nt <strong>de</strong> modul <strong>de</strong> a tin<strong>de</strong> spre zero al intervalului<br />

<strong>de</strong> discretizare.<br />

15.2.3. Meto<strong>de</strong> mono-pas sau uni-pas<br />

Ecuaţiile diferenţiale sunt ecuaţii fără „memorie”, adică valorile lui y(t), <strong>pentru</strong> t< t i<br />

nu afectează direct valorile lui y(t), la t


308<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

h 2 , respectiv O(h 2 ).<br />

Metoda Euler modificată ia în con<strong>si</strong><strong>de</strong>raţie valoarea medie a <strong>de</strong>rivatei, pe un<br />

subinterval. Con<strong>si</strong><strong>de</strong>rarea doar a valorii <strong>de</strong>rivatei la capătul din stânga al acestuia este<br />

principala sursă <strong>de</strong> eroare. Astfel, după ce yn+ 1 = yn<br />

+ Fn<br />

⋅ h,<br />

0 ≤ n ≤ N -1<br />

, a fost<br />

utilizat <strong>pentru</strong> primul subinterval, cu ajutorul lui t 1 şi y 1 corespunzător, pe care-l notăm<br />

(1)<br />

1<br />

y , se <strong>de</strong>termină F 1 , la capătul din dreapta şi se face media ( F + )/<br />

2<br />

0 F 1<br />

. Aceasta se<br />

con<strong>si</strong><strong>de</strong>ră a fi F 0 , în ecuaţia iniţială şi se reia calculul, obţinând o valoare îmbunătaţită a<br />

(2)<br />

1<br />

lui y 1 , pe care o notăm cu y . Dacă este cazul, procesul se repetă <strong>de</strong> un număr <strong>de</strong> p ori,<br />

înainte <strong>de</strong> a trece la următorul subinterval, un<strong>de</strong> se proce<strong>de</strong>ază în acelaşi mod. Cu această<br />

perfecţionare, metoda este foarte utilizată. Metoda se mai numeşte şi metoda implicită<br />

într-un pas sau metoda punctului mijlociu, fiind aplicată <strong>si</strong>stemelor rigi<strong>de</strong>.<br />

Relaţia <strong>de</strong> recurenţă este,<br />

y<br />

n+<br />

1<br />

= y<br />

j<br />

+ K<br />

2<br />

,<br />

0 ≤ n ≤ N -1,<br />

( t , y ),<br />

K = h ⋅ F( t + h 2, y + K 2),<br />

K1<br />

= h ⋅ F n n 2<br />

n<br />

n 1<br />

Eroarea dată <strong>de</strong> toţi termenii care se omit este proporţională cu h 3 , respectiv O(h 3 ).<br />

Pentru rezolvarea problemelor rigi<strong>de</strong> (stiff) se aplică metoda lui Euler implicită,<br />

care are la bază relaţia,<br />

y n+ 1 = yn<br />

+ h ⋅ F( tn+<br />

1,<br />

yn+<br />

1)<br />

.<br />

În schema implicită, obţinerea soluţiei este mai dificilă, cu atât mai mult dacă f este<br />

nelineară, dar metoda este mai stabilă.<br />

O altă metodă <strong>de</strong> autopornire, dar cu o eroare <strong>de</strong> trunchiere con<strong>si</strong><strong>de</strong>rabil mai mică,<br />

este metoda Runge-Kutta, care face integrarea tot pe subintervale. Unul dintre<br />

principalele avantaje ale meto<strong>de</strong>i constă în faptul că se aplică uşor, <strong>pentru</strong> orice tip <strong>de</strong><br />

ecuaţie <strong>de</strong> ordinul întâi şi permite chiar varierea pasului reţelei.<br />

Con<strong>si</strong><strong>de</strong>rând subintervalul <strong>de</strong> discretizare dintre t n şi t n+ 1, metoda utilizează<br />

estimarea valorii funcţiei, atât la capele subintervalului, cât şi la mijlocul acestuia.<br />

Sunt cunoscute două submeto<strong>de</strong> Runge-Kutta:<br />

• metoda Runge-Kutta <strong>de</strong> ordinul 2 , la care sunt trunchiaţi termenii<br />

conţinând <strong>de</strong>rivate <strong>de</strong> ordin superior lui trei, din <strong>de</strong>zvoltarea în<br />

serie Taylor a funcţiei şi care are la bază relaţiile <strong>de</strong> recurenţă,<br />

y<br />

K<br />

n+<br />

1<br />

1<br />

= y<br />

n<br />

= h ⋅ F<br />

+ 0.5⋅( K1<br />

+ K 2<br />

),<br />

0 ≤ n ≤ N -1,<br />

( t , y ),<br />

K = h ⋅ F( t + h,<br />

y + K ),<br />

n<br />

n<br />

2<br />

n<br />

Eroarea este proporţională cu h 3 , respectiv O(h 3 );<br />

• metoda Runge-Kutta <strong>de</strong> ordinul 4 , la care sunt trunchiaţi termenii<br />

conţinând <strong>de</strong>rivate <strong>de</strong> ordin superior lui cinci, din <strong>de</strong>zvoltarea în<br />

serie Taylor a funcţiei.<br />

n<br />

1


Rezolvarea numerică a ecuaţiilor diferenţiale 309<br />

y<br />

K<br />

n+<br />

1<br />

1<br />

= y<br />

n<br />

= h ⋅ F<br />

+ 1 6⋅<br />

( K1<br />

+ 2K<br />

2 + 2K3<br />

+ K 4 ),<br />

0 ≤ n ≤ NJ -1,<br />

( tn<br />

, yn<br />

),<br />

K 2 = h ⋅ F( tn<br />

+ h 2, yn<br />

+ K1<br />

2)<br />

,<br />

( t + h 2, y + K 2) , K = h ⋅ F( t + h,<br />

y + K ).<br />

K3<br />

= h ⋅ F n<br />

n 2 4<br />

n<br />

Eroarea este proporţională cu h 5 , respectiv O(h 5 ).<br />

De menţionat că mărirea preciziei meto<strong>de</strong>i nu este po<strong>si</strong>bilă. Din relaţiile <strong>de</strong><br />

recurenţă se observă că, <strong>pentru</strong> <strong>de</strong>terminarea funcţiei y în punctele reţelei <strong>de</strong> discretizare,<br />

nu este nevoie <strong>de</strong>cât <strong>de</strong> valoarea funcţiei în punctul prece<strong>de</strong>nt.<br />

15.2.4. Meto<strong>de</strong> multi-pas<br />

Meto<strong>de</strong>le multi-pas sunt meto<strong>de</strong> <strong>de</strong> continuare şi <strong>de</strong>ci, nece<strong>si</strong>tă aplicarea unor<br />

meto<strong>de</strong> uni-pas, care să permită cunoaşterea valorilor y n−1, yn−2 , L şi F n−1 , Fn−2 , L.<br />

Prin aceasta, meto<strong>de</strong>le se con<strong>si</strong><strong>de</strong>ră că sunt „cu memorie”.<br />

Relaţia <strong>de</strong> bază a meto<strong>de</strong>lor multi-pas, aici cu m paşi, este<br />

m<br />

m<br />

n+<br />

1 −i<br />

i n+<br />

1−i<br />

n+<br />

1−i<br />

=<br />

i=<br />

0<br />

∑ a ⋅ y − h ⋅ ∑b<br />

⋅ F(<br />

t , y ) 0 ,<br />

i<br />

i=<br />

0<br />

fiind <strong>de</strong>finită <strong>pentru</strong> un număr <strong>de</strong> m paşi şi <strong>de</strong> parametrii a i şi b i . O reducere a<br />

generalizării este atunci când a 0 = 1 . Dacă b 0 = 0 , metoda este explicită, altfel este<br />

implicită. De notat că algoritmii multi-pas nece<strong>si</strong>tă evaluarea numai a unei noi<br />

funcţii, la fiecare pas.<br />

Sunt foarte multe meto<strong>de</strong> multi-pas, grupate în familii <strong>de</strong> meto<strong>de</strong>, în care fiecare<br />

membru al familiei găseşte soluţia, cu o anumită acurateţe. Cele mai populare familii sunt<br />

familiile Adams-Bashforth, Adams-Moulton, Gear.<br />

Meto<strong>de</strong>le Adams-Bashforth con<strong>si</strong><strong>de</strong>ră a = 1, b 0 - adică algoritmul este<br />

1 −<br />

explicit şi a i = 0 , i = 2,3, LK<br />

, un<strong>de</strong> K este ordinul, respectiv m=K. Relaţiile, în funcţie<br />

<strong>de</strong> ordin, sunt:<br />

• Ordinul întâi: y = y + h ⋅ F(<br />

t , y )<br />

n+ 1 n<br />

n n ;<br />

1<br />

• Ordinul secund: y + h ⋅( 3F(<br />

t , y ) F(<br />

t y )<br />

y n+ 1 = n<br />

n n − n−1<br />

, n−1<br />

;<br />

2<br />

1<br />

• Ordinul trei: y n+ 1 = yn<br />

+ h ⋅( 23F(<br />

tn<br />

, yn<br />

) −16F(<br />

tn−1,<br />

y n−1+<br />

5F(<br />

tn−2,<br />

yn−2<br />

));<br />

12<br />

1 ⎛55F(<br />

t<br />

⎞<br />

• Ordinul patru:<br />

⎜<br />

n , yn<br />

) − 59F(<br />

tn−1,<br />

y n−1+<br />

y = + ⋅<br />

⎟<br />

n+<br />

1 yn<br />

h<br />

24<br />

;<br />

⎝+<br />

37F(<br />

tn−2,<br />

yn−2<br />

) − 9F(<br />

tn−3,<br />

yn−3)<br />

⎠<br />

⎛1901F<br />

( t<br />

⎞<br />

⎜<br />

n , yn<br />

) − 2774F(<br />

tn−1,<br />

y n−1+<br />

1<br />

⎟<br />

• Ordinul cinci: y n+<br />

1 = yn<br />

+ h ⋅⎜+<br />

2616F(<br />

tn−2<br />

, yn−2<br />

) −1274F(<br />

tn−3,<br />

yn−3)<br />

⎟ ;<br />

720<br />

⎜<br />

⎟<br />

⎝<br />

+ 251F<br />

( tn−4,<br />

yn−4<br />

)<br />

⎠<br />

0 =<br />

n<br />

3


310<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

⎛4277F(<br />

t<br />

⎞<br />

⎜<br />

n , yn<br />

) − 7923F(<br />

tn−1,<br />

y n−1)<br />

+<br />

1<br />

⎟<br />

• Ordinul şase: y n+<br />

1 = yn<br />

+ h ⋅⎜+<br />

9982F(<br />

tn−2,<br />

yn−2<br />

) − 7298F(<br />

tn−3,<br />

yn−3)<br />

⎟ .<br />

1440<br />

⎜<br />

⎟<br />

⎝<br />

+ 2877F(<br />

tn−4,<br />

yn−4<br />

) − 475F(<br />

tn−5,<br />

yn−5)<br />

⎠<br />

Meto<strong>de</strong>le Adams-Moulton con<strong>si</strong><strong>de</strong>ră a = 1, b 0 - adică algoritmul este<br />

1 −<br />

implicit şi a i = 0,<br />

i = 2,3, L K −1, un<strong>de</strong> K este ordinul, respectiv m=K. Relaţiile, în<br />

funcţie <strong>de</strong> ordin, sunt:<br />

• Ordinul întâi: y y + h F t , y ) ;<br />

n+ 1 = n ⋅ ( n+<br />

1 n+<br />

1<br />

1<br />

• Ordinul secund: y y + h ⋅ ( F(<br />

t , y ) F(<br />

t , y )<br />

0 ≠<br />

n+ 1 = n<br />

n+<br />

1 n+<br />

1 − n n ;<br />

2<br />

1<br />

• Ordinul trei: y + h ⋅ ( 5F(<br />

t , y ) + 8F(<br />

t , y F(<br />

t , y ))<br />

y n+ 1 = n<br />

n+<br />

1 n+<br />

1<br />

n n−<br />

n−1<br />

n−1<br />

;<br />

12<br />

1 ⎛9F(<br />

t<br />

⎞<br />

• Ordinul patru:<br />

⎜<br />

n+<br />

1,<br />

yn+<br />

1)<br />

+ 19F(<br />

tn<br />

, y n)<br />

−<br />

y = + ⋅<br />

⎟<br />

n+<br />

1 yn<br />

h<br />

;<br />

24 ⎝−<br />

5F(<br />

tn−1,<br />

yn−1<br />

) + F(<br />

tn−2,<br />

yn−2<br />

⎠<br />

⎛251F<br />

( t<br />

⎞<br />

⎜<br />

n+<br />

1,<br />

yn+<br />

1)<br />

+ 646F(<br />

tn,<br />

y n)<br />

−<br />

1<br />

⎟<br />

• Ordinul cinci: y n+<br />

1 = yn<br />

+ h ⋅⎜−<br />

2646F(<br />

tn−1,<br />

yn−1<br />

) + 106F(<br />

tn−2,<br />

yn−2<br />

) −⎟<br />

;<br />

720<br />

⎜<br />

⎟<br />

⎝<br />

−19F(<br />

tn−3,<br />

yn−3)<br />

⎠<br />

⎛475F(<br />

t<br />

⎞<br />

⎜<br />

n+<br />

1,<br />

yn+<br />

1)<br />

+ 1427F(<br />

tn<br />

, y n)<br />

−<br />

1<br />

⎟<br />

• Ordinul şase: y n+<br />

1 = yn<br />

+ h ⋅⎜−<br />

798F(<br />

tn−1,<br />

yn−1<br />

) + 482F(<br />

tn−2,<br />

yn−2<br />

) −⎟<br />

;<br />

1440<br />

⎜<br />

⎟<br />

⎝<br />

−173F(<br />

tn−3,<br />

yn−3)<br />

+ 27F(<br />

tn−4,<br />

yn−4<br />

)<br />

⎠<br />

Meto<strong>de</strong>le Gear con<strong>si</strong><strong>de</strong>ră b0 ≠ 0 - adică algoritmul este implicit şi b i = 0 ,<br />

i = 1,2,3, LK , un<strong>de</strong> K este ordinul, respectiv m=K.<br />

Relaţiile, în funcţie <strong>de</strong> ordin, sunt:<br />

• Ordinul întâi: y y + h F t , y ) ;<br />

n+ 1 = n ⋅ ( n+<br />

1 n+<br />

1<br />

1<br />

• Ordinul secund: y n+ 1 = yn<br />

+ ( 4yn<br />

− yn−1<br />

+ 2h<br />

⋅ F(<br />

tn+<br />

1,<br />

yn+<br />

1)<br />

) ;<br />

3<br />

1<br />

• Ordinul trei: y n+ 1 = yn<br />

+ ( 18yn<br />

− 9yn−1<br />

+ 2yn−2<br />

+ 6h<br />

⋅ F(<br />

tn+<br />

1,<br />

yn+<br />

1)<br />

);<br />

11<br />

1 ⎛ 48yn<br />

− 36yn−1<br />

+ 16yn−2<br />

− ⎞<br />

• Ordinul patru: y n+<br />

1 = yn<br />

+<br />

⎜<br />

⎟ ;<br />

25 ⎝ − 3yn−3<br />

+ 12h<br />

⋅ F(<br />

tn+<br />

1,<br />

yn+<br />

1)<br />

⎠<br />

1 ⎛360yn<br />

− 300y<br />

n−1+<br />

200yn−2<br />

− 75yn−3<br />

+ ⎞<br />

• Ordinul cinci: y n+<br />

1 = yn<br />

+<br />

⎜<br />

⎟ ;<br />

137 ⎝+<br />

12yn−4<br />

+ 60h<br />

⋅ F(<br />

tn+<br />

1,<br />

yn+<br />

1)<br />


Rezolvarea numerică a ecuaţiilor diferenţiale 311<br />

• Ordinul şase:<br />

1 ⎛360yn<br />

− 450yn−1<br />

+ 400yn−2<br />

− 225yn−3<br />

+ ⎞<br />

y n+<br />

1 = yn<br />

+<br />

⎜<br />

⎟ ;<br />

147 ⎝+<br />

72yn−4<br />

−10yn−5<br />

+ 60h<br />

⋅ F(<br />

tn+<br />

1,<br />

yn+<br />

1)<br />

⎠<br />

15.2.5. <strong>Sisteme</strong> <strong>de</strong> ecuaţii diferenţiale ordinare <strong>de</strong> gradul întâi<br />

Un <strong>si</strong>stem <strong>de</strong> ecuaţii diferenţiale <strong>de</strong> ordin superior poate fi transformat într-un<br />

<strong>si</strong>stem <strong>de</strong> ecuaţii diferenţiale <strong>de</strong> ordinul întâi, prin introducerea unor funcţii necunoscute.<br />

Rezolvarea unui <strong>si</strong>stem <strong>de</strong> n ecuaţii diferenţiale <strong>de</strong> ordinul întâi se poate reduce la<br />

rezolvarea unei ecuaţii diferentiale <strong>de</strong> ordinul n şi invers.<br />

Rezolvarea unei ecuaţii diferenţiale <strong>de</strong> ordinul n se poate reduce la rezolvarea unui<br />

<strong>si</strong>stem <strong>de</strong> ecuaţii diferenţiale <strong>de</strong> ordinul întâi.<br />

Un <strong>si</strong>stem ODE se poate scrie generic sub forma:<br />

y′ = f ( t,<br />

y),<br />

y(0)<br />

= y ,<br />

0<br />

un<strong>de</strong> y, este un vector <strong>de</strong> elemente y i şi f ( t,<br />

y1,<br />

y2,<br />

y3,<br />

L , ym<br />

) , este vector funcţie,<br />

cu elementele f i .<br />

Din punctul <strong>de</strong> ve<strong>de</strong>re al soluţiilor numerice, <strong>si</strong>stemele ODE sunt exten<strong>si</strong>i înainte<br />

ale tehnicii aplicate unei <strong>si</strong>ngure ODE. De exemplu, aplicând schema explicită Euler,<br />

avem:<br />

( n+<br />

1) ( n)<br />

( n)<br />

( n)<br />

( n)<br />

( n)<br />

( n)<br />

yi = yi<br />

+ h ⋅ f ( t , y1<br />

, y2<br />

, y3<br />

L , ym<br />

),<br />

i = 1,2,3, L,<br />

m .<br />

Expre<strong>si</strong>a din partea dreaptă poate fi calculată utilizând datele <strong>de</strong> la pasul anterior<br />

astfel că, fiecare <strong>de</strong>terminare se face prin avansarea calculului înainte, în sensul creşterii<br />

lui t. Din punct <strong>de</strong> ve<strong>de</strong>re conceptual, aceasta este <strong>si</strong>ngura <strong>de</strong>osebire fundamentală dintre<br />

soluţionarea numerică a <strong>si</strong>stemelor, faţă <strong>de</strong> o <strong>si</strong>ngură ecuaţie.<br />

O categorie aparte <strong>de</strong> <strong>si</strong>steme ODE o reprezintă <strong>si</strong>stemele <strong>de</strong> ecuaţii lineare cu<br />

coeficienţi constanţi, <strong>pentru</strong> care se pune problema rigidităţii (stiffness),<br />

dy<br />

= A⋅<br />

y, y(0)<br />

= y0<br />

,<br />

dt<br />

un<strong>de</strong> A este o matrice <strong>de</strong> n x n , a constantelor. Sistemul este <strong>de</strong> n ecuaţii lineare cu<br />

n funcţii necunoscute, cu coeficienţi constanţi, omogen.<br />

Pentru ca <strong>si</strong>stemul să fie <strong>de</strong>terminat, să aibă soluţii, trebuie ca toate valorile proprii<br />

ale lui A să aibă partea reală negativă, analog cu cazul unei <strong>si</strong>ngure ecuaţii, y ′ = λ ⋅ y ,<br />

când partea reală a lui λ , trebuie să fie negativă.<br />

Aplicând schema Euler ,explicită, <strong>si</strong>stemului ODE avem<br />

n<br />

n<br />

yn+1 = yn<br />

+ h ⋅ A⋅<br />

yn<br />

= ( I + h ⋅ A) ⋅ yn<br />

sau yn<br />

= ( I + h ⋅ A) ⋅ y0 = B ⋅ y0<br />

,<br />

un<strong>de</strong> I, este matricea i<strong>de</strong>ntitate. Pentru a avea soluţii numerice stabile, <strong>pentru</strong> cazul<br />

n<br />

lui n mare, trebuie ca matricea B să fie finită. Din algebra lineară rezultă că,<br />

<strong>pentru</strong> aceasta, trebuie ca valorile proprii ale lui B, să aibă modulul mai mic sau cel<br />

mult egal cu unitatea. Valorile proprii ale lui B sunt σi<br />

= 1 + h ⋅ λi<br />

, un<strong>de</strong> λ i , sunt<br />

valorile proprii ale matricei A.<br />

Prin urmare, <strong>pentru</strong> stabilitatea numerică, trebuie să avem:


312<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

2<br />

1+ h ⋅ λi<br />

≤ 1⇒<br />

h ≤ .<br />

λ<br />

i max<br />

Dacă rangul magnitudinii valorilor proprii este mare, <strong>de</strong> exemplu<br />

S ≡ max λ min λ >> 1, un<strong>de</strong> S ,se numeşte raportul <strong>de</strong> rigiditate (stiffness ratio) şi<br />

i<br />

i<br />

i<br />

i<br />

soluţiile se caută <strong>pentru</strong> o variaţie largă a variabilei in<strong>de</strong>pen<strong>de</strong>nte t, avem aşa numitele<br />

<strong>si</strong>steme rigi<strong>de</strong> (stiff). Acestea apar în <strong>si</strong>tuaţii reale, în care sunt cuplate <strong>si</strong>steme cu timpi<br />

diferiţi <strong>de</strong> răspuns la excitaţii exterioare, ca <strong>de</strong> exemplu: un <strong>si</strong>stem mecanic compus din<br />

două părţi, una foarte rigidă şi cealaltă foarte flexibilă; amestecul a două substanţe<br />

chimice cu rate <strong>de</strong> reacţie foarte diferită; strat limită.<br />

În general, astfel <strong>de</strong> <strong>si</strong>steme nu pot fi rezolvate prin scheme directe ci nece<strong>si</strong>tă<br />

aplicarea unor meto<strong>de</strong> implicite care, la rândul lor, conduc la nece<strong>si</strong>tatea rezolvării unui<br />

<strong>si</strong>stem algebric <strong>de</strong> ecuaţii nelineare, <strong>pentru</strong> care se aplică procedurile <strong>de</strong> calcul iterativ,<br />

precum metoda Newton-Raphson.<br />

Pentru rezolvare, <strong>si</strong>stemele <strong>de</strong> ecuaţii diferenţiale nelineare sunt supuse tehnicii <strong>de</strong><br />

linearizare. Pentru un <strong>si</strong>stem ODE, la fiecare moment este necesară rezolvarea <strong>si</strong>stemului<br />

<strong>de</strong> ecuaţii algebrice,<br />

( n+<br />

1) ( n)<br />

h ⎛ h ( n)<br />

⎞ ( n+<br />

1) ( n)<br />

( n)<br />

( n)<br />

y = y + ⎜ I − A ⎟( f ( t , y ) + f ( t , y<br />

), n = 1,2,3, Lm<br />

2 ⎝ 2 ⎠<br />

în care I, este matricea i<strong>de</strong>ntitate, iar A este matricea Jacobian, recalculată la fiecare<br />

pas,<br />

⎡ df1<br />

df1<br />

df1<br />

⎤<br />

⎢<br />

L<br />

dy<br />

⎥<br />

⎢<br />

1 dy2<br />

dym<br />

⎥<br />

⎢df<br />

2 df 2 df 2 ⎥<br />

( n)<br />

L<br />

A = ⎢dy<br />

dy dy ⎥ .<br />

1 2<br />

m<br />

⎢<br />

M M L M<br />

⎥<br />

⎢ df<br />

⎥<br />

⎢<br />

m df m df m<br />

L ⎥<br />

⎢⎣<br />

dy1<br />

dy2<br />

dym<br />

⎥⎦<br />

15.2.6. Probleme cu condiţii la margine<br />

Problemele cu condiţii la margine (pe frontieră sau la limită) conduc, în mod<br />

necesar, la ecuaţii diferenţiale <strong>de</strong> ordinul doi sau mai mare. Dintre acestea, ecuaţiile <strong>de</strong><br />

ordin impar, cu număr diferit <strong>de</strong> condiţii la cele două margini ale intervalului <strong>de</strong> <strong>de</strong>finiţie<br />

sunt, <strong>de</strong> regulă, greu <strong>de</strong> soluţionat numeric şi sunt transformate, <strong>de</strong> obicei, în ecuaţii <strong>de</strong><br />

ordin par, fie prin integrare, fie prin <strong>de</strong>rivare.<br />

Con<strong>si</strong><strong>de</strong>răm o ecuaţie <strong>de</strong> ordinul doi cu condiţii la margine,<br />

y ′ = f ( x, y,<br />

y′<br />

) , y ( 0) = y0<br />

, y ( L)<br />

= yL<br />

,<br />

un<strong>de</strong> f, este o funcţie arbitrară.<br />

Sunt cunoscute două tehnici <strong>pentru</strong> rezolvarea problemelor cu condiţii la margine:


Rezolvarea numerică a ecuaţiilor diferenţiale 313<br />

schimbarea variabilei – tehnică utilizată <strong>de</strong> meto<strong>de</strong>le standard <strong>pentru</strong><br />

problemele cu valori iniţiale, precum meto<strong>de</strong>le Runge-Kutta;<br />

meto<strong>de</strong> directe – bazate pe discretizarea puternică înainte şi<br />

transformarea ecuaţiilor cu <strong>de</strong>rivate, în ecuaţii diferentiale şi apoi,<br />

rezolvând <strong>si</strong>stemul algebric astfel format.<br />

15.2.7. Probleme cu valori proprii<br />

În cazul în care ecuaţia diferenţială <strong>de</strong> ordinul doi cu condiţii la margine este<br />

omogenă, caz frecvent întâlnit, ca <strong>de</strong> exemplu ecuaţia lui Helmholtz,<br />

2<br />

y ′ + k ⋅ y = 0 , y ( 0) = y(1)<br />

= 0,<br />

apare o problemă cu valori proprii,<br />

k n = n ⋅ π, n = 1,2, L,<br />

N<br />

şi vectori proprii,<br />

( x)<br />

= <strong>si</strong>n( n ⋅ π⋅<br />

x)<br />

.<br />

y n<br />

2<br />

2<br />

Punând λ = -k<br />

⋅ ∆x<br />

, <strong>si</strong>stemul se poate scrie sub forma (A - λ ⋅ I ) ⋅ y = 0 , în<br />

care I este maticea i<strong>de</strong>ntitate, A este aşa numita matrice Stieltjes,<br />

⎡−<br />

2 1 L 0 ⎤ ⎡ y1<br />

⎤<br />

⎢<br />

⎥ ⎢ ⎥<br />

⎢<br />

1 − 2 L 0<br />

A =<br />

⎥ , iar ⎢<br />

y2<br />

y = ⎥ .<br />

⎢ M M L M ⎥ ⎢ M ⎥<br />

⎢<br />

⎥ ⎢ ⎥<br />

⎣ 0 0 L − 2⎦<br />

⎣y N −1 ⎦<br />

15.3. Funcţii Matlab <strong>pentru</strong> rezolvarea ODE<br />

Funcţiile Matlab <strong>pentru</strong> rezolvarea ecuaţiilor diferenţiale ordinare, ODE, încep cu<br />

<strong>si</strong>ntaxa o<strong>de</strong>,urmată <strong>de</strong> numere şi litere, care să precizeze tipul meto<strong>de</strong>i folo<strong>si</strong>te, astfel că,<br />

în continuare, le numim generic, funcţii funo<strong>de</strong> şi sunt prezentate în tabelul 15.1.<br />

Toate funcţiile o<strong>de</strong> pot rezolva ecuaţii <strong>de</strong> tipul,<br />

dy(<br />

t)<br />

M ⋅ = F(<br />

t,<br />

y)<br />

⇔ M ⋅ y′<br />

= F(<br />

y,<br />

t)<br />

,<br />

dt<br />

iar funcţiile o<strong>de</strong>15s, o<strong>de</strong>23s, o<strong>de</strong>23t şi o<strong>de</strong>23tb pot rezolva şi ecuaţii <strong>de</strong> forma<br />

dy(<br />

t)<br />

M ( t)<br />

⋅ = F(<br />

t,<br />

y)<br />

⇔ M ( t)<br />

⋅ y′<br />

= F(<br />

y,<br />

t)<br />

.<br />

dt<br />

Funcţiile o<strong>de</strong> se apelează cu una dintre <strong>si</strong>ntaxele:<br />

• [T,Y] = funo<strong>de</strong>('F',interval,y0), un<strong>de</strong> Y este matricea soluţiilor, în care<br />

fiecărui rând îi corepun<strong>de</strong> un moment <strong>de</strong> timp din vectorul coloană<br />

T , F o funcţie <strong>de</strong> variabile t şi y, interval este intervalul <strong>de</strong><br />

integrare, [to tfinal], iar <strong>pentru</strong> a obţine soluţii în anumite momente<br />

(<strong>de</strong> exemplu toate crescătoare), intervalul este <strong>de</strong> forma [t0 t1 t2 …


314<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

tfinal], şi y0 este vectorul condiţiilor iniţiale;<br />

• [T,Y] = funo<strong>de</strong>('F',interval,y0,optiuni) face acelaşi lucru ca şi prece<strong>de</strong>nta,<br />

cu diferenţa că parametrii impliciţi <strong>de</strong> integrare au fost înlocuiţi cu<br />

„opţiuni”, un argument creat cu funcţia o<strong>de</strong>set, care inclu<strong>de</strong><br />

toleranţa erorii relative, TelTol=1e-3 şi un vector al erorii absolute,<br />

AbsTol, ce are toate elementele egale cu 1e-6;<br />

• [T,Y] = funo<strong>de</strong>('F',interval,y0,optiuni,p1,p2,...) transferă funcţiei F<br />

parametrii opţionali p1,p2,….<br />

Funo<strong>de</strong><br />

o<strong>de</strong>45<br />

o<strong>de</strong>23<br />

o<strong>de</strong>113<br />

Metoda<br />

numerică<br />

Runge-<br />

Kutta<br />

Runge-<br />

Kutta<br />

Funcţii Matlab <strong>pentru</strong> ODE Tabel 15.1.<br />

Tipul <strong>de</strong><br />

problemă<br />

nerigi<strong>de</strong><br />

(nonstiff)<br />

nerigi<strong>de</strong><br />

(nonstiff)<br />

nerigi<strong>de</strong><br />

(nonstiff)<br />

o<strong>de</strong>15s diferenţe rigi<strong>de</strong><br />

(stiff)<br />

o<strong>de</strong>23s Rosenbrock rigi<strong>de</strong><br />

modificată (stiff)<br />

o<strong>de</strong>23t<br />

o<strong>de</strong>23tb<br />

Adams-<br />

Bashfort-<br />

Moulton<br />

Runge-<br />

Kutta<br />

semi -<br />

rigi<strong>de</strong><br />

rigi<strong>de</strong><br />

(stiff)<br />

Complexitatea<br />

ecuaţiei<br />

Toreranţa<br />

Utilizare<br />

medie mică în mod uzual, se<br />

recomandă a se încerca<br />

prima dată<br />

mică mare <strong>pentru</strong> toleranţe mari<br />

ale erorii sau<br />

rezolvarea ecuaţiilor<br />

variabilă mică -<br />

medie<br />

cu complexitate medie<br />

când se doreşte o<br />

anumită toleranţă<br />

<strong>pentru</strong> erori.<br />

variabilă mică -<br />

medie<br />

când calculul cu o<strong>de</strong>45<br />

durează prea mult<br />

mică mare când se doresc<br />

toleranţe mai mari în<br />

ce priveşte eroarea, la<br />

rezolvarea <strong>si</strong>stemelor<br />

cu complexitate mare<br />

medie mică când complexitatea<br />

ecuaţiei este mo<strong>de</strong>rată<br />

mică mare toleranţe mari ale<br />

erorii, la rezolvarea<br />

<strong>si</strong>stemelor complexe<br />

O<strong>de</strong>45 se bazează pe formula Runge-Kutta(<strong>de</strong> gradul 4, 5) cu adaptarea Dormand-<br />

Prince şi rezolvă ecuaţiile într-un <strong>si</strong>ngur pas. O<strong>de</strong>23 se bazează pe formula Runge-<br />

Kutta(<strong>de</strong> gradul 2, 3), cu adaptarea Bogacki-Shampine şi rezolvă ecuaţiile prin mai mulţi<br />

paşi. O<strong>de</strong>15s se bazează pe formula diferenţială numerică, NDFs şi nece<strong>si</strong>tă mai mulţi<br />

paşi <strong>pentru</strong> rezolvare. O<strong>de</strong>23s se bazează pe formula modificată Rosembrock şi rezolvă<br />

într-un <strong>si</strong>ngur pas. O<strong>de</strong>23t se bazează pe formula Runge Kutta.<br />

Pentru funcţiile o<strong>de</strong>15s <strong>si</strong> o<strong>de</strong>23s, care sunt nişte funcţii <strong>de</strong> complexitate mare,<br />

dF<br />

Jacobianul matricei are o mare influenţă asupra preciziei rezolvării şi <strong>de</strong> aceea, se<br />

dy


Rezolvarea numerică a ecuaţiilor diferenţiale 315<br />

dF<br />

setează J constant pe „on”, dacă Jacobianul este constant.<br />

dy<br />

Fiecare funcţie funo<strong>de</strong> acceptă numai anumiţi parametri <strong>pentru</strong> a lucra corect, sau<br />

pot fi specificaţi, dar sunt ignoraţi în rezolvare. Parametrii acceptaţi sunt redaţi în tabelul<br />

15.2.<br />

Funcţii Matlab <strong>pentru</strong> ODE Tabel 15.2.<br />

Parametri o<strong>de</strong>45 o<strong>de</strong>23 o<strong>de</strong>113 o<strong>de</strong>15s o<strong>de</strong>23s o<strong>de</strong>23t o<strong>de</strong>23tb<br />

RelTol, AbsTol<br />

OutputFcn, OutputSel,<br />

Refine, Stats<br />

Events<br />

MaxStep, InitialStep<br />

JConstant, Jacobian,<br />

JPattern, Vectorized<br />

-- -- --<br />

Mass -- -- --<br />

-- -- --<br />

MassConstant -- -- --<br />

MaxOr<strong>de</strong>r, BDF -- -- -- --<br />

Pentru a crea sau schimba opţiunile implicite <strong>pentru</strong> funcţiile funo<strong>de</strong>, se foloseşte<br />

funcţia o<strong>de</strong>set, care se apelează cu una dintre <strong>si</strong>ntaxe:<br />

• opţiuni = o<strong>de</strong>set ('nume1',valoare1,'nume2',valoare2,...) creează o structură<br />

<strong>de</strong> opţiuni, în care argumentele nume1, nume2,… primesc valorile<br />

valoare1, valoare2,…, argumentele nespecificate sunt iniţializate<br />

automat, cu o matrice goală, [ ] şi este suficient să scriem numai<br />

caracterele <strong>de</strong> început, care i<strong>de</strong>ntifică în mod unic numele<br />

argumentelor, fără a se ţine cont dacă, caracterele sunt litere mari<br />

sau mici (nu e „case sen<strong>si</strong>tive”);<br />

• opţiuni = o<strong>de</strong>set (optiunivechi,'nume1',valoare1,...) schimbă conţinutul unei<br />

structuri vechi <strong>de</strong> opţiuni, creată anterior;<br />

• opţiuni = o<strong>de</strong>set (optiunivechi,optiuninoi) modifică o structură <strong>de</strong> opţiuni<br />

vechi, combinând-o cu una nouă;<br />

• o<strong>de</strong>set <strong>si</strong>ngur, fără nici o specificaţie, afişează toate argumentele precum şi<br />

valorile lor po<strong>si</strong>bile: AbsTol: [ po<strong>si</strong>tive scalar or vector {1e-6}],<br />

BDF: [ on | {off} ], Events: [ on | {off} ], InitialStep: [ po<strong>si</strong>tive<br />

scalar ], Jacobian: [ on | {off} ], JConstant: [ on | {off} ], JPattern:<br />

[ on | {off} ], Mass: [ on | {off} ], MassConstant: [ on | {off}],<br />

MaxOr<strong>de</strong>r: [ 1 | 2 | 3 | 4 | {5} ], MaxStep: [ po<strong>si</strong>tive scalar ],<br />

OutputFcn: [ string ], OutputSel: [ vector of integers ], Refine:<br />

[ po<strong>si</strong>tive integer ], RelTol: [ po<strong>si</strong>tive scalar {1e-3} ], Stats: [ on |<br />

{off} ], Vectorized: [ on | {off} ].


316<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

15.3.1. Rezolvarea Matlab a ecuaţiilor diferenţiale<br />

Pentru rezolvarea ecuaţiilor diferenţiale cu funcţiile funo<strong>de</strong>, din Matlab este<br />

necesară scrirea expre<strong>si</strong>ei funcţiei F şi a soluţiei iniţiale, y, care <strong>de</strong>pin<strong>de</strong> <strong>de</strong> elementele<br />

funcţiei.<br />

Forma Matlab a funcţiei F este:<br />

function ydot=F(t,y)<br />

y(1) = expre<strong>si</strong>e 1; y(2) = expre<strong>si</strong>e 2; y(3) = expre<strong>si</strong>e 3;<br />

ydot = [ y(1); y(2); y(3) ]<br />

Forma <strong>pentru</strong> vectorul soluţii ,y0 este, <strong>de</strong> exemplu, [2; 0 ; 1], ceea ce reprezintă:<br />

y(1) 0 = 2, y(2) 0 = 0, y(3) 0 = 1.<br />

Pentru ODE <strong>de</strong> ordin superior este necesară transformarea acestora în ODE <strong>de</strong><br />

ordinul 1. De exemplu, <strong>pentru</strong> funcţia f(t, y, y', y'',..., y n-1 ),<br />

se <strong>de</strong>finesc,<br />

y 1 = y ; y 2 = y' ; y 3 = y''; ... , y n = y n-1 ; Y=[ y 1 , y 2 , y 3 , y n ]<br />

astfel că,<br />

f(t, y, y', y'',..., y n-1 ) = f(t, y 1 , y 2 , y 3 , y n ) ; Y'=f(t,Y)<br />

se scriu expre<strong>si</strong>ile,<br />

y 1 ' = y 2 ; y 2 ' = y 3 ; y 3 '= y 4 ; ... ; y n ' = y n ;<br />

şi în final, funcţia F:<br />

function ydot=F(t,y)<br />

expre<strong>si</strong>e 1: y 1 ' = y 2 ;<br />

expre<strong>si</strong>e 2: y 2 ' = y 3 ;<br />

expre<strong>si</strong>e 3: y 3 '= y 4 ;<br />

….. ... ;<br />

expre<strong>si</strong>e n-1: y n ' = y n ;<br />

ydot = [ expre<strong>si</strong>e 1; expre<strong>si</strong>e 2; expre<strong>si</strong>e 3; ….; expre<strong>si</strong>e n-1 ].<br />

Pentru a scrie funcţia o<strong>de</strong>f1.m, care să rezolve ecuaţia y''' + y'' + y' =0,se urmează<br />

paşii:<br />

Pasul 1: se <strong>de</strong>finesc y1 = y ; y2 = y' ; y3 = y'' ;<br />

Pasul 2: se scriu expre<strong>si</strong>ile y1'= y2 ; y2' = y3 ; y3''' = - y'' -y' = -y3 - y2 ;<br />

Pasul 3: se srie funcţia o<strong>de</strong>f1:<br />

% Function o<strong>de</strong>f1.m<br />

function ydot=o<strong>de</strong>f1(t,y)<br />

% ydot = [y(2);y(3); -y(3)-y(2)];<br />

T1=y(2) ; T2=y(3) ; T3=-y(3) - y(2);<br />

ydot = [ T1 ; T2 ; T3 ];<br />

Rezolvarea acestei ecuaţii pe intervalul ti=[0 20] , cu soluţia iniţială y0= [10;1;0],<br />

precum şi plotarea soluţiilor, se realizează cu următoarea secvenţă <strong>de</strong> program:<br />

y0=[10;1;0]; ti=[0 20];<br />

[t,y]=o<strong>de</strong>45('o<strong>de</strong>f1',ti,y0);


Rezolvarea numerică a ecuaţiilor diferenţiale 317<br />

subplot(3,1,1); plot(t,y(:,1)); xlabel('t'); ylabel('dy/dt');<br />

subplot(3,1,2); plot(t,y(:,2)); xlabel('t'); ylabel('d^2y/dt^2');<br />

subplot(3,1,3); plot(t,y(:,3)); xlabel('t'); ylabel('d^3y/dt^3').<br />

Graficul este reprezentat în figura 15.1.<br />

Fig.15.1. Rezolvarea ecuaţiei o<strong>de</strong>f1<br />

Un exemplu <strong>de</strong> <strong>si</strong>stem cu complexitate mică este un <strong>si</strong>stem <strong>de</strong> ecuaţii care <strong>de</strong>scriu<br />

mişcarea unui corp rigid , asupra căruia nu acţionează forţe exterioare, dat <strong>de</strong> ecuaţiile,<br />

y1′ = y2<br />

⋅ y3<br />

; y′ 2 = − y1<br />

⋅ y3<br />

; y3′ = −0.<br />

51⋅<br />

y1<br />

⋅ y2<br />

;<br />

y 1 (0) = 0 ; y 2 (0) = 1; y 3 (0) = 1 .<br />

Pentru rezolvare se creează o funcţie fişier .M :<br />

function dy = rigid(t,y)<br />

dy = zeros(3,1); % a column vector<br />

dy(1) = y(2) * y(3); dy(2) = -y(1) * y(3); dy(3) = -0.51 * y(1) * y(2);<br />

dy=[dy(1); dy(2); dy(3)];<br />

În acest exemplu vom schimba toleranţa erorii cu comanda o<strong>de</strong>set şi vom rezolva,<br />

pe intervalul [0 12], cu vectorul <strong>de</strong> condiţii iniţiale [0 11], la momentul 0.<br />

options = o<strong>de</strong>set('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);<br />

[t,y] = o<strong>de</strong>45('rigid',[0 12],[0 1 1],options);<br />

plot(t,y(:,1),'-r',t,y(:,2),'b-.',t,y(:,3),'g.'); ylabel('dy/dt , d^2y/dt^2 , d^3y/dt^3 ');<br />

xlabel('t'); gtext('dy/dt') ; gtext('d^2y/dt^2') ; gtext('d^3y/dt^3').<br />

Graficul funcţiei este redat în figura 15.2.<br />

Un exemplu <strong>de</strong> <strong>si</strong>stem cu grad <strong>de</strong> complexitate mare sunt ecuaţiile Van <strong>de</strong>r Pol,<br />

ecuaţii ce <strong>de</strong>scriu oscilaţiile


318<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

2<br />

′ ; y2 = 1000⋅<br />

( 1−<br />

y1<br />

) ⋅ y2<br />

− y1<br />

y 1 = y 2<br />

′ ; y (0) 0 ; y (0) 1 .<br />

1 =<br />

2 =<br />

Fig.15.2. Graficul funcţiei rigid<br />

Pentru rezolvare se creează o funcţie fişier .M :<br />

function dy = vdp1000(t,y)<br />

dy = zeros(2,1); dy(1) = y(2); dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1);<br />

Se folosesc toleranţele absolute şi relative implicite (1e-3 şi respectiv 1e-6) şi vom<br />

rezolva pe intervalul [0 3000], cu vectorul <strong>de</strong> condiţii initiale [0 2], la momentul 0.<br />

[t,y] = o<strong>de</strong>15s('vdp1000',[0 3000],[2 0]);<br />

plot(t,y(:,1),'-o'); ylabel('dy/dt') ; xlabel('t');<br />

Graficul primei <strong>de</strong>rivate se prezintă în figura 15.3.<br />

Fig.15.3. Graficul primei <strong>de</strong>rivate a ecuaţiei Van <strong>de</strong>r Pol

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!