Documente Academic
Documente Profesional
Documente Cultură
ordinare
Cap. 8. REZOLVAREA NUMERICĂ A ECUAȚIILOR ŞI
SISTEMELOR DE ECUAȚII DIFERENȚIALE ORDINARE
8.1. Aspecte introductive
Studiul comportamentului dinamic al sistemelor fizice,
economice, financiare, biologice ş.a. conduce la modele matematice
sub forma ecuațiilor sau sistemelor de ecuații diferențiale ordinare,
liniare sau neliniare. În general acestea nu pot fi rezolvate pe cale
analitică, prin metode clasice, datorită faptului că uneori nu se
cunosc expresiile funcțiilor care definesc derivatele, iar alteori aceste
expresii sunt complicate.
În acest capitol se abordează în principal metodele numerice
de rezolvare a ecuațiilor diferențiale de ordinul întâi, care vor fi
extinse în subcapitolul 8.3 asupra sistemelor de ecuații diferențiale
de ordinul întâi precum şi asupra ecuațiilor diferențiale de ordin
superior.
Problema de rezolvare a unei ecuații diferențiale de ordinul
întâi se pune în felul următor [B3]. Se consideră ecuația diferențială
ordinară
dy
= f ( x, y ) , f : [a, b] x I → R , [a, b ], I ⊂ R , a = x0 , (8.1.1)
dx
dy
(se notează y ' = , I – interval) ,
dx
cu condiția inițială
y 0 = y ( x 0 ) . (8.1.2)
Se cere să se determine expresia functiei y(x) care verifică relațiile
(8.1.1) şi (8.1.2). Problema enunțată este cunoscută ca problemă de
tip Cauchy.
Ecuația diferențială ordinară (8.1.1), în care y’ este exprimată
explicit, poate fi rearanjată şi sub următoarea formă implicită:
F(x, y, y’) = 0 , F : [a, b] x I 1 x I 2 → R , [a, b ], I 1 , I 2 ⊂ R , (8.1.3)
cu I1 şi I2 – intervale.
Se presupune că s‐a efectuat în prealabil un studiu al
problemei enunțate, constatându‐se existența şi unicitatea soluției.
134
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
În continuare, pentru determinarea aproximativă a soluției se poate
proceda în două moduri (de exemplu, [K2]):
a) fie se caută o funcție z(x) care să aproximeze cât mai bine pe
y(x) pentru x∈ [a, b] , ceea ce reprezintă o rezolvare
aproximativă analitică;
b) fie se determină valorile y1, y2, …, yn care să aproximeze cât
mai bine valorile exacte y(x1), y(x2), …, y(xn), ale lui y(x) pentru
x∈ [a, b] dacă punctele x1, x2, …, xn ∈ [a, b] sunt considerate
echidistante:
x i +1 − x i = h, i = 0, n − 1 , (8.1.4)
în care h reprezintă pasul de discretizare (de integrare) şi
capetele intervalului căruia îi aparține variabila independentă
x sunt: x0=a, xn=b.
Acest ultim mod de determinare aproximativă a soluției, b),
numit şi metodă numerică propriu‐zisă, este ilustrat în fig.8.1.
Fig.8.1. Punerea problemei de rezolvare a unei ecuații diferențiale
ordinare printr‐o metodă numerică propriu‐zisă.
În cadrul capitolului vor fi prezentate numai metode
numerice propriu‐zise (de tip b), caracterizate prin faptul că
determinarea valorilor aproximative y1, y2, …, yn se va face folosind
relații de următoarea formă generală care pune în evidență funcția g:
135
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
8.2. Metode monopas pentru ecuații diferențiale
Metodele monopas sunt caracterizate prin faptul că la
calculul valorilor aproximative y i , i = 1, n , sunt folosite folosesc
numai informațiile din punctul anterior ( xi −1 , y i −1 ) , relația (8.1.5)
obținând forma particulară:
y i = y i −1 + h ⋅ g ( x i −1 , y i −1 , h), i = 1, n . (8.2.1)
Metodele se diferențiază între ele prin forma funcției g, dar
toate sunt bazate pe dezvoltarea în serie Taylor în vecinătatea lui xi:
h h2
y ( x i ) = y ( x i −1 ) + y ' ( x i −1 ) + y" ( x i −1 ) + ... (8.2.2)
1! 2!
şi reținerea unui anumit număr de termeni din (8.2.2).
Algoritmii expliciți determină valorile y i , i = 1, n , prin
efectuarea unui număr finit de operații aritmetice elementare
aplicând direct o relație de tip (8.2.1).
Algortimi predictor‐corector determină valorile y i , i = 1, n ,
printr‐un proces de calcul iterativ cu convergență teoretic infinită,
dar practic finită, conform următoarelor etape:
a) se inițializează valoarea lui yi:
136
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
y i = y i −1 + h ⋅ g p ( x i −1 , y i −1 , h) ; (8.2.3)
b) la un pas oarecare k, k = 1, 2, 3, …, al procesului iterativ de
calcul se determină noua valoare a lui yi:
y ik = y i −1 + h ⋅ g c ( x i −1 , y i −1 , xi , y ik −1 , h) ; (8.2.4)
c) calculul este terminat când yi a fost determinat cu o precizie
impusă / dorită:
y ik − y ik −1 ≤ ε , (8.2.5)
cu eroarea ε > 0 prestabilită.
Relația (8.2.3), aplicată o singură dată, constituie formula de
predicție (predictor), iar relația (8.2.4), aplicată în mod repetat până
la atingerea preciziei dorite, constituie formula de corecție (corector).
În continuare sunt prezentate metodele de tip Euler. În acord
cu clasificarea prezentată în subcapitolul 8.1, metodele de tip Euler
sunt metode monopas cu algoritm explicit la care din dezvoltarea în
serie Taylor (8.2.2) sunt reținuți numai primii doi termeni:
y i = y i −1 + h ⋅ y i' −1 . (8.2.6)
Ținând seama de expresia ecuației diferențiale (8.1.1), relația (8.2.6)
se transformă pentru versiunea clasică a metodei Euler în:
y i = y i −1 + h ⋅ f ( x i −1 , y i −1 ) . (8.2.7)
Prin urmare, rezolvarea ecuației diferențiale de ordinul întâi
(8.1.1) prin versiunea clasică a metodei Euler se face în modul
următor: pornind de la condiția inițială (8.1.2), se aplică succesiv
relația (8.2.7) pentru i = 1, n rezultând toate valorile căutate.
În fig.8.2 este prezentată interpretarea geometrică a
metodelor de tip Euler (pentru i = 1).
137
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Fig.8.2. Interpretarea geometrică a metodelor de tip Euler (pentru i=1).
Exemplul 8.1: Se consideră următoarea ecuație diferențială
ordinară:
y’ = f(x, y) = y – x + 2 ,
cu condiția inițială:
y0 = y(x0) = y(0) = 0 .
Să se rezolve numeric pentru x ∈ [0, 1] , cu un pas de discretizare h =
0.1 (n = 10) utilizând versiunea clasică a metodei Euler.
Soluție: Se efectuează calculele aferente versiunii clasice a
metodei Euler. Pentru aceasta se particularizează relațiile (8.1.4),
(8.2.6) şi (8.2.7) rezultând succesiv:
f 0 = f ( x 0 , y 0 ) = f (0, 0) = 0 − 0 + 2 = 2 ;
x1 = 0 + h = 0 + 0.1 = 0.1 ;
y1 = y 0 + h ⋅ f 0 = 0 + 0.1 ⋅ 2 = 0.2 ;
f 1 = f ( x1 , y1 ) = f (0.1, 0.2) = 0.2 − 0.1 + 2 = 2.1 ;
x 2 = x1 + h = 0.1 + 0.1 = 0.2 ;
y 2 = y1 + h ⋅ f 1 = 0.2 + 0.1 ⋅ 2.1 = 0.41 ;
f 2 = f ( x 2 , y 2 ) = f (0.2, 0.4) = 0.41 − 0.2 + 2 = 2.21 ;
x 3 = x 2 + h = 0.2 + 0.1 = 0.3 ;
y 3 = y 2 + h ⋅ f 2 = 0.41 + 0.1⋅ 2.21 = 0.631 ;
f 3 = f ( x 3 , y 3 ) = f (0.3, 0.631) = 0.631 − 0.3 + 2 = 2.331 .
138
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Rămâne ca exercițiu pentru cititor efectuarea calculelor
pentru i = 4,10 precum şi rezolvarea aceluiaşi exemplu în cazurile
h=0.05 (n=20) şi h=0.025 (n=40).
Versiunea clasica a metodei Euler este simplă, însă puțin
precisă, fiind recomandabilă doar în cazul rezolvărilor rapide
aproximative.
Versiunea Cauchy a metodei Euler asigură îmbunătățirea
preciziei şi stabilității numerice, cu prețul creşterii volumului de
calcule. Această versiune se deosebeşte de cea clasică prin înlocuirea
relației (8.2.7) cu:
y i = y i −1 + h ⋅ f [x i −1 + 0.5h, y i −1 + 0.5h ⋅ f ( xi −1 , y i −1 )] , (8.2.8)
adică y’ nu se mai aproximează pe intervalul [ xi −1, xi ] cu valoarea de
la începutul intervalului, ci cu o aproximație a valorii de la mijlocul
acestui interval.
Exemplul 8.2: Să se rezolve ecuația diferențială din cadrul
exemplului 8.1 în aceleaşi condiții cu versiunea Cauchy a metodei
Euler.
Soluție: De data aceasta se obțin succesiv următoarele
rezultate:
f 0 = f ( x 0 , y 0 ) = f (0, 0) = 0 − 0 + 2 = 2 ;
x1 = 0 + h = 0 + 0.1 = 0.1 ;
f (0 + 0.5h, 0 + 05h ⋅ f 0 ) = f (0 + 0.5 ⋅ 0.1, 0 + 0.5 ⋅ 0.1 ⋅ 2) = 2.05 ;
y1 = y 0 + h ⋅ 2.05 = 0 + 0.1⋅ 2.05 = 0.205 ;
f 1 = f ( x1 , y1 ) = f (0.1, 0.205) = 0.205 − 0.1 + 2 = 2.105 ;
x 2 = x1 + h = 0.1 + 0.1 = 0.2 ;
f ( x1 + 0.5h, y1 + 0.5h ⋅ f1 ) = f (0.1 + 0.5 ⋅ 0.1, 0.205 +
+ 0.5 ⋅ 0.1 ⋅ 2.105) = 2.1602 ;
y 2 = y1 + h ⋅ 2.1602 = 0.205 + 0.1 ⋅ 2.1602 = 0.421 .
Se lasă în sarcina cititorului efectuarea calculelor pentru
i = 3,10 precum şi rezolvarea aceluiaşi exemplu în cazurile h=0.05 şi
h=0.025.
Ambele metode de tip Euler prezintă dezavantajul unui
număr mare de calcule în situația în care intervalul [a, b] este relativ
larg şi aceasta deoarece este nevoie de un număr foarte mare de paşi
139
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
de discretizare pentru a acoperi intervalul. În plus, erorile făcute la
fiecare pas (a se vedea şi fig.8.2) se pot acumula şi propaga
imprevizibil. Acest ultim aspect este de foarte mare importanță şi va
fi discutat în cadrul acestui capitol.
Alte metode care asigură îmbunătățirea în continuare a
preciziei şi a erorii de trunchiere pe un pas de integrare sunt cele de
tip Runge‐Kutta. Conform clasificării din pargraful precedent,
metodele de tip Runge‐Kutta sunt metode monopas cu algoritm
explicit.
Pentru reducerea erorii, la determinarea lui y i , i = 1, n , se
calculează valorile lui f(x, y) într‐un număr de puncte intermediare ale
intervalului [ xi −1 , x i ] , acest număr de puncte fiind legat direct de
ordinul p al metodei.
Forma generală a metodelor de tip Runge‐Kutta este (de
exemplu, [P1]):
k1 = h ⋅ f ( xi −1 , y i −1 ) , (8.2.9)
j −1
k j = h ⋅ f ( x i −1 + h ⋅ b j , y i −1 + ∑ c jm k m ), j = 2, p , (8.2.10)
m =1
p
y i = y i −1 + ∑ a m k m . (8.2.11)
m =1
140
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Alte variante de metode de tip Runge‐Kutta cu proprietăți
avantajoase sunt metodele Runge‐Kutta‐Merson, Ralston –Runge‐
Kutta şi Butcher‐Runge‐Kutta.
O problemă importantă în cazul aplicării şi implementării
metodelor de tip Runge‐Kutta şi nu numai este reprezentată de
adaptarea mărimii pasului de integrare. Astfel, în subdomenii ale
intervalului [a, b] în care funcția are variații line, poate fi utilizat un
pas relativ mare. Dacă însă, există subdomenii în care au loc variații
rapide ale lui y pentru variații relativ mici ale lui x, atunci este necesar
un pas mic. În sfârşit, există funcții pentru care pot fi prezente
ambele tipuri de subdomenii menționate. În această situație, în locul
utilizării unui pas de integrare mic pe întreg intervalul [a, b] este
preferată o soluție mai eficientă, de adaptare automată a mărimii
pasului de integrare în funcție de valoarea gradientului funcției
necunoscute, y’(x). Acest procedeu este implementat în Matlab
conform [P2].
8.3. Metode multipas pentru ecuații diferențiale
Se consideră din nou ecuaţia diferenţială de ordinul întâi
(8.1.1) cu condiţia iniţială (8.1.2) şi se cere să se rezolve această
ecuaţie, adică să se determine expresia functiei y(x) care verifică
relaţiile (8.1.1) şi (8.1.2) specifice unei probleme de tip Cauchy.
Se pune problema rezolvării ecuației menționate printr‐o
metodă numerică propriu‐zisă, adică, în acord cu cele menționate în
subcapitolul 8.1, se cere să se determine valorile y1, y2, …, yn care să
aproximeze cât mai bine valorile exacte y(x1), y(x2), …, y(xn), ale lui
y(x) pentru x∈ [a, b] dacă punctele x1, x2, …, xn∈ [a, b] sunt
considerate echidistante cu pasul de integrare h (definit în relația
(8.1.4)).
Metodele multipas sunt caracterizate prin faptul că la calculul
valorilor aproximative y i , i = 1, n , se folosesc, spre deosebire de
cazul metodelor monopas, informațiile din mai multe puncte
anterioare punctului curent ( x i , y i ) , relația (8.1.5) obținând forma
particulară (8.3.1):
y i = y i −1 + h ⋅ g ( xi − r , y i − r ,..., xi − 2 , y i − 2 , xi −1 , y i −1 , h), i = 1, n ,
(8.3.1)
în care r ∈ N, r ≥ 2 reprezintă numărul de puncte anterioare utilizate.
141
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Metodele se diferențiază între ele prin forma funcției g şi
valoarea lui r, dar toate sunt bazate pe utilizarea unor integrale
având forma (8.3.2):
xi
y( xi ) − y( xi −r ) = ∫ y ( x)dx ,
'
(8.3.2)
xi − r
142
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Dezavantajele metodelor multipas față de cele monopas
sunt următoarele:
nu este asigurată autopornirea deoarece la primii paşi nu sunt
disponibile informațiile din punctele anterioare, aceste fiind
motivul pentru care sunt utilizate de regulă pentru pornire
metode monopas cu eroare de trunchiere de acelaşi ordin de
mărime;
modificarea pasului de integrare h (este vorba în primul rând
despre reducerea acestuia, efectuată în vederea creşterii
preciziei) se face relativ dificil, fiind necesare reveniri la puncte
deja determinate sau reporniri cu metode monopas;
la unele variante poate creşte volumul de calcule.
În continuare sunt prezentate metodele de tip Adams‐
Bashforth‐Moulton. În acord cu clasificarea prezentată în
subcapitolul 8.1, metodele de tip Euler sunt metode multipas cu
algoritm explicit la care, pentru metodele de tip Adams‐Bashforth‐
Moulton de ordinul m (de exemplu, [K2], [P1], [P2]):
relația (8.3.2) este particularizată pentru r = 1;
integrandul din relația (8.3.2), y’(x) = f(x, y), este aproximat cu un
polinom de interpolare Lagrange Pm–1(x) de gradul m–1 (a se
vedea capitolul 7), definit prin intermediul a m perechi de valori:
( x j , f ( x j , y j ), j = i − m + 1, i . (8.3.6)
Algoritmul metodei Adams‐Bashforth‐Moulton de ordinul m
= 4 (de tip predictor‐corector) constă în parcurgerea următoarelor
etape, prin care sunt determinate succesiv valorile y i , i = 1, n , pe
baza unor procese de calcul iterativ [K2]:
1) Se inițializează yi utilizând formula de predicție (de tip (8.3.3)):
y i0 = y i −1 + h(55 f ( xi −1 , y i −1 ) − 59 f ( xi − 2 , y i − 2 ) +
(8.3.7)
+ 3 f ( xi −3 , y i −3 ) − 9 f ( xi − 4 , y i − 4 )) / 24,
în care indicele superior corespunde numărului iteraţiei curente.
2) La un pas oarecare k, k = 1, 2, 3, …, al procesului iterativ de calcul
este determinată noua valoare a lui yi utilizând formula de
corecție (de tip (8.3.4)):
y ik = y i −1 + h(9 f ( xi , y ik−−11 ) + 19 f ( xi −1 , y i −1 ) −
(8.3.8)
− 5 f ( xi − 2 , y i − 2 ) + f ( xi −3 , y i −3 )) / 24.
3) Calculul este terminat când yi a fost determinat cu o precizie
impusă / dorită (condiția de tip (8.3.5)):
143
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
y ik − y ik −1 ≤ ε , (8.3.9)
cu eroarea ε > 0 prestabilită.
Algoritmul este pornit pentru i = 4, deci valorile f(x0,y0),
f(x1,y1), f(x2,y2) şi f(x3,y3) trebuie cunoscute înainte de pornire. În
practică, aceste valori trebuie obținute printr‐o procedură de
autopornire similară celor din cazul metodelor de tip Runge‐Kutta
[P2].
Pentru aprofundarea aspectelor legate de metodele
monopas şi multipas este recomandat studiul lucrărilor [B1], [B2],
[D2], [G3], [K2], [M2], [N1], [T1].
Pentru rezolvarea ecuațiilor diferențiale ordinare de ordin
superior, se procedează după cum urmează. Se consideră ecuația
diferențială de ordinul n:
y ( n ) = f ( x, y, y ' , y '' ,..., y ( n −1) ) , (8.3.10)
cu x ∈ [a, b], în condițiile inițiale:
⎧ y(x0 ) = y 0
⎪ y' ( x ) = y'
⎪ 0 0
⎧ y1 ( x ) = y ( n −1)
⎪ ( n−2)
⎪ y 2 ( x) = y
⎪⎪ y ( x) = y ( n −3)
⎨ 3 . (8.3.12)
⎪ L
⎪ y (x ) = y'
⎪ n −1
⎪⎩ y n ( x ) = y
Prin efectuarea substituțiilor în relația (8.3.10) se obține că
ecuația diferențială de ordinul n prezentată în (8.3.10) este
echivalentă cu următorul sistem de n ecuații diferențiale ordinare de
ordinul întâi:
144
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
⎧ y1′ = f ( x, y n , y n −1 ,..., y1 )
⎪ y′ = y
⎪ 2 1
⎪⎪ y 3′ = y 2
⎨ . (8.3.13)
⎪ L
⎪ y n′ − 2 = y n −3
⎪
⎪⎩ y n′ −1 = y n − 2
Condițiile inițiale pentru sistemul (8.3.13) se obțin din relațiile
(8.3.11) şi (8.3.12) şi rezultă sub forma următoare:
⎧ y1 ( x 0 ) = y ( n −1) 0
⎪
⎪ y 2 (x0 ) = y
( n−2)
0
⎪⎪ y ( x ) = y ( n −3)
0
⎨ 3 0 . (8.3.14)
⎪ L
⎪ y (x ) = y'
⎪ n −1 0 0
⎪⎩ y n ( x 0 ) = y 0
Pentru rezolvarea sistemelor de ecuații diferențiale ordinare
de tip (8.3.13) în condițiile inițiale (8.3.14) pot fi utiliza metode
numerice similare rezolvării numerice a ecuațiilor diferențiale
ordinare de ordinul întâi prezentate în cadrul acestui capitol sau în
lucrările indicate. Trebuie acordată însă atenție faptului că volumul
de calcule este mai mare în cazul acestor sisteme.
145
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
diferențiale ordinare – devine însă dificilă şi necesită un efort relativ
mare.
În sens restrâns, se spune că un algoritm este numeric stabil
dacă nu introduce o sensibilitate mai mare în raport cu datele decât
cea inerentă problemei, adică nu înrăutățeşte condiționarea
problemei asociate algoritmului. Altfel spus (de exemplu, [V1]), un
algoritm este numeric stabil dacă rezultatul calculat de acesta este –
sau este apropiat de – soluția exactă cu mici perturbații a problemei
inițiale.
Dacă problema numerică este bine condiționată, atunci
soluția calculată de un algoritm numeric stabil este apropiată de
soluția exactă. Pentru mulți algoritmi – în particular, pentru cei
destinați rezolvării numerice a ecuațiilor şi sistemelor de ecuații
diferențiale ordinare – stabilitatea numerică poate fi demonstrată
matematic şi exprimată sub forma unor condiții de stabilitate.
Cu referire la stabilitatea numerică a algoritmilor destinați
rezolvării numerice a ecuațiilor diferențiale ordinare analizați în
cadrul acestui capitol pot fi făcute următoarele observații (de
exemplu, [P1]):
1. În cazul metodelor de tip Euler condiția de stabilitate poate
fi exprimată sub forma:
–2 < h∙∂f/∂y < 0 , (8.4.1)
de unde se poate concluziona că:
A. este necesar ca ∂f/∂y < 0 pentru asigurarea stabilității numerice,
B. poate apare instabilitate numerică pentru anumite valori ale
pasului de integrare h.
2. Şi în cazul metodelor de tip Runge-Kutta se pot trage
aceleaşi concluzii, rezultate din condiţia de stabilitate:
M < h∙∂f/∂y < 0 , (8.4.2)
în care parametrul M < 0 poate fi estimat şi diferă de la o metodă de
tip Runge‐Kutta la alta.
Pentru asigurarea stabilității numerice se poate proceda la
reducerea valorii pasului de integrare h până la o valoare suficient de
mică. Însă, metodele de tip Runge‐Kutta sunt mai puțin eficiente
decât cele de tip predictor‐corector datorită numărului mai mare de
evaluări ale funcției la fiecare pas; deci, o reducere prea substanțială
a valorii lui h determină creşterea considerabilă a volumului de
calcule legate de evaluările funcției. Prin urmare, după cum a fost
menționat şi în subcapitolul 8.2, cel puțin din motivul asigurării
146
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
stabilității numerice este nevoie de ajustarea cu grijă a pasului de
integrare pe parcursul procesului de soluționare e ecuației
diferențiale.
3. În cazul metodelor de tip Adams-Bashforth-Moulton se pot
trage concluziile A. şi B. de la metodele de tip Euler. De data aceasta
condiţia de stabilitate are expresia (8.4.3):
–1.25 < h∙∂f/∂y < 0 , (8.4.3)
care este de asemenea utilă la estimarea mărimii pasului de integrare
h.
Alegerea metodei numerice de integrare a ecuațiilor
diferențiale ordinare este strâns legată de analiza erorilor de calcul
în procesul de rezolvare a ecuațiilor diferențiale ordinare. Astfel,
după cum a fost menționat în capitolul 2, erorile de calcul pot fi de
trei tipuri – erori de trunchiere, erori de rotunjire şi erori de
propagare – fiind importantă analiza efectului fiecărui tip de eroare în
parte asupra preciziei rezultatelor, scopul fiind evident cel de
reducere a erorilor de calcul.
Erorile de trunchiere depind de metoda numerică aleasă.
Pentru metodele numerice analizate în cadrul capitolului erorile de
trunchiere sunt:
♦ de ordinul de mărime al lui h2 pentru versiunea clasică a
metodelor de tip Euler şi de ordinul de mărime al lui h3 pentru
versiunea Cauchy a metodelor de tip Euler;
♦ de ordinul de mărime al lui h5 pentru metodele de tip Runge‐
Kutta de ordinul 4;
♦ de ordinul de mărime al lui h5 pentru metodele de tip Adams‐
Bashforth‐Moulton de ordinul 4.
Erorile de rotunjire depind de posibilitățile echipamentului
de calcul pe care sunt implementați algoritmii de rezolvare a
metodelor numerice. Aceste erori pot fi diminuate dacă se utilizează
modul de lucru în dublă precizie. Cu toate acestea, erorile de
rotunjire cresc pe măsura creşterii numărului de paşi de integrare
datorită propagării erorilor de la un pas la altul.
Legat de erorile de propagare, efectul lor este simțit mai ales
la metodele de tip predictor‐corector. Este important să fie utilizate
numai metode numeric stabile, la care erorile nu se propagă în mod
imprevizibil sau chiar nemărginit.
Pentru reducerea erorilor de trunchiere este recomandată
micşorarea pasului de integrare, însă aceasta conduce la creşterea
147
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
erorii de rotunjire. Pe de altă parte, micşorarea pasului de integrare
conduce la creşterea numărului de paşi, cu consecința imediată a
creşterii timpului de calcul. Deci, trebuie căutată – ca o soluție de
compromis – acea valoare a pasului de integrare pentru care erorile
de calcul (“suma” celor trei tipuri de erori menționate) să fie cât mai
mici.
Ținând seama legătura dintre mărimea pasului de integrare şi
cea a erorilor de calcul, alegerea unei anumite metode de rezolvare
numerică a ecuațiilor diferențiale ordinare reprezintă o problemă
relativ complexă, autorii sugerând utilizarea următoarelor
recomandări:
Dacă se cer rezolvări rapide, atunci se poate alege o metodă
simplă, de tip Euler, cu un pas de integrare relativ mic, dar cu o
valoare absolută mult superioară celui mai mic număr posibil a fi
reprezentat în echipamentul de calcul.
Dacă se cer rezolvări precise fără a fi important timpul de calcul,
atunci se poate alege metoda Runge‐Kutta de ordinul 4 datorită
avantajelor legate de autopornire.
Dacă se cer rezolvări precise fără modificări semnificative ale
pasului de integrare, atunci se poate alege metoda Adams‐
Bashforth‐Moulton de ordinul 4 datorită avantajelor legate de
stabilitate numerică.
La toate metodele numerice utilizate este necesară analiza
stabilității numerice deoarece toate trebuie să fie numeric
stabile. Dacă aceasta nu poate fi efectuată teoretic, atunci
trebuie testată în funcție de aplicație.
În afara recomandărilor amintite, alegerea unei anumite
metode numerice depinde de experiența utilizatorului şi de aplicație.
8.5. Aplicații în Matlab
Pentru implementarea în Matlab a algoritmului metodei
Euler în varianta clasică este dezvoltată funcția feuler, prezentată în
continuare [P1]:
function [xval,yval]=feuler(f,a,b,y0,h)
% Algoritmul versiunii clasice a metodei Euler
% in rezolvarea ecuatiei dy/dx=f(x,y)
% cu conditia initiala y(x0)=y0
%
% functia f(x,y) – sa fie definita
% de utilizator,
% a=x0 si b – valorile initiale si
148
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
% finale ale lui x,
% h – pasul de integrare,
% xval si yval – vectorii cu valorile
% lui x si y
%
% n - numarul de pasi:
n=(b-a)/h+1;
x=a; xval=a;
y=y0; yval=y0;
for i=2:n,
x=x+h;
y=y+h*feval(’f’,x,y);
xval=[xval, x];
yval=[yval, y];
end
Funcția va fi aplicată în cadrul exemplului 8.3.
Exemplul 8.3: Să se rezolve prin versiunea clasică a metodei
Euler următoarea ecuație diferențială:
y’ = – 5y + 5 ,
pe intervalul x ∈ [0, 1], cu condiţia iniţială y(0) = 0.
Soluție: Pentru început, se creează un fişier funcție, cu
numele f.m, pentru definirea membrului drept al ecuației
diferențiale:
function dy=f(x,y)
dy=-5*y+5;
Apoi, se execută următoarea secvență de program Matlab
care apelează funcția feuler pentru două valori ale pasului de
discretizare: h = 0.2 şi h = 0.05:
[xval1,yval1]=feuler(’f’,0,1,0,0.2);
[xval2,yval2]=feuler(’f’,0,1,0,0.05);
% Reprezentari grafice:
plot(xval1,yval1,'k-.',xval2,yval2,'k-')
axis([0 1 0 1.2])
grid; xlabel('x'); ylabel('y');
title('h=0.05 ---- h=0.2 -.-.-')
hhh=gcf;
set(hhh,'color',[1 1 1]);
În fig.8.3 este prezentat rezultatul executării programului
anterior sub forma graficelor aferente celor două soluții ale ecuației
diferențiale. Se poate observa clar superioritatea soluției pentru
pasul de integrare mic, h = 0.05.
149
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Pentru rezolvarea numerică a ecuațiilor şi sistemelor de
ecuații diferențiale de ordinul întâi prin metode de tip Runge‐Kutta
în Matlab sunt utilizate funcțiile ode23 (destinată rezolvării prin
metodele Runge‐Kutta de ordinul 2 şi 3) şi ode45 (destinată rezolvării
prin metodele Runge‐Kutta de ordinul 4 şi 5). Funcția ode45 este
apelabilă în cel puțin două forme având următoarele sintaxe [M1],
[P2]:
[xval,yval]=ode45(’yprim’,dom,y0)
[xval,yval]=ode45(’yprim’,dom,y0,options)
în care argumentele au semnificația:
Fig.8.3. Două variante de soluții ale ecuației diferențiale din exemplul
8.3.
yprim variabilă şir conținând numele unui fişier M, fişier
funcție, în care este definită derivata funcției
necunoscute, y, membrul drept al ecuației diferențiale
(8.1.1);
dom domeniul (intervalul) valorilor variabilei independente x,
dom = [a b], în care:
a valoarea inițială a variabilei
independente x (adică x0 conform
relației (8.1.1)),
b valoarea finală a variabilei independente
x (a se vedea din nou relația (8.1.1));
150
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
y0 vector (matrice coloană) conținând condițiile inițiale
(adică y0 conform relației (8.1.2));
options argument prin care pot fi setați anumiți parametri ai
metodei de rezolvare numerică, prin intermediul funcției
odeset.
Prin aplicarea funcției ode45 se obțin:
xval vector conținând valorile variabilei independente x;
yval vector conținând valorile funcției necunoscute y.
Funcția odeset are următoarea sintaxă:
options=odeset(’param1’,val1,’param1’,val1,…)
în care ‘paramj’ reprezintă numele unui parametru, iar valj
reprezintă valoarea asignată acelui parametru, j = 1, 2, … .
Parametrii nespecificați rămân cu valorile lor implicite. În continuare
sunt definiți doi dintre aceşti parametri, restul fiind definiți în [M1]:
RelTol precizia relativă dorită a soluției, cu valoarea implicită
RelTol=10−3;
AbsTol precizia absolută dorită a soluției, cu valoarea implicită
AbsTol=10−6.
Funcțiile ode23 şi ode45 implementează metodele de tip
Runge‐Kutta‐Fehlberg, cu adaptarea automată a mărimii pasului de
integrare în funcție de valoarea gradientului funcției necunoscute,
y’(x).
În continuare este examplificată aplicarea funcției ode45.
Exemplul 8.4: Să se rezolve prin metoda Runge‐Kutta de
ordinul 4 următoarea ecuație diferențială:
y” = – 1.2y’ – y + 10 ,
pe intervalul x ∈ [0, 10], cu condiţiile iniţiale y(0) = 2, y’(0) = 0.
Soluție: Rezolvarea începe prin transformarea ecuației
diferențiale într‐un sistem de două ecuații diferențiale de ordinul
întâi. Pentru aceasta se procedează conform subcapitolului 8.3 şi se
introduc două funcții notate cu y1 şi y2:
y1 = y’ , y2 = y .
Rezultă următorul sistem de două ecuații diferențiale de ordinul întâi:
y1’ = – 1.2y1 – y2 + 10 ,
y2’ = y1 ,
în condiţiile iniţiale y1(0) = 0, y2(0) = 2.
Se creează un fişier funcție, cu numele yprim.m, pentru
definirea membrului drept al sistemului de ecuații diferențiale:
151
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
function dy=yprim(x,y)
% dy – vectorul derivatelor:
dy=zeros(2,1);
dy(1)=-1.2*y(1)-y(2)+10;
dy(2)=y(1);
În final, se execută următoarea secvență de program Matlab
care apelează funcția ode45 pentru precizia absolută AbsTol=10−2 şi
precizia relativă RelTol=10−4:
% Conditii initiale:
y0=[0 2]’;
% Domeniu:
dom=[0 10];
% Precizie relativa si absoluta:
options=odeset(’RelTol’,10^(-2),...
’AbsTol’,10^(-4));
% Apelare ode45:
[xval,yval]=ode45(’yprim’,dom,y0,options);
% Reprezentarea grafica:
y=yval(:,2);
plot(xval,y,'k-')
grid; xlabel('x'); ylabel('y');
title('Solutia')
hhh=gcf;
set(hhh,'color',[1 1 1]);
În fig.8.4 este prezentat rezultatul executării programului
anterior sub forma graficului soluției ecuației diferențiale.
Fig.8.4. Soluția ecuației diferențiale din exemplul 8.4.
152
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Pentru implementarea în Matlab a algoritmului metodei
Adams‐Bashforth‐Moulton de ordinul 4 este dezvoltată funcția fabm,
prezentată în cele ce urmează. Trebuie remarcat faptul că pentru
pornire se efectuează 3 paşi cu o metodă Runge‐Kutta de ordinul 4.
function [xval,yval]=fabm(f,a,b,y0,h)
% Algoritmul metodei Adams-bashforth-Moulton de
% ordinul 4
% in rezolvarea ecuatiei dy/dx=f(x,y)
% cu conditia initiala y(x0)=y0
%
% functia f(x,y) – sa fie definita de
% utilizator,
% a=x0 si b – valorile initiale si finale
% ale lui x,
% h – pasul de integrare,
% xval si yval – vectorii cu valorile
% lui x si y
%
% Pregatirea matricelor pentru metoda
% Runge-Kutta:
aab=[]; bb=[]; cc=[];
aa=[1/6 1/3 1/3 1/6];
bb=[0 0.5 0.5 1];
cc=[0 0 0 0;0.5 0 0 0;0 0.5 0 0;0 0 1 0];
% n - numarul de pasi:
n=(b-a)/h+1;
x=a; y=y0; fval(1)=feval(’f’,x,y);
ys(1)=y0; xval=a; yval=y0;
% Aplicarea metodei Runge-Kutta:
for j=2:4
k(1)=h*feval(’f’,x,y);
for i=2:4
k(i)=h*feval(’f’,x+h*bb(i),y+cc(i,1:i-
1)*k(1:i-1)’);
end
y1=y+aa*k’; ys(j)=y1; x1=x+h;
fval(j)=feval(’f’,x1,y1);
xval=[xval, x1]; x=x1;
yval=[yval, y1]; y=y1;
end
% Aplicarea metodei Adams-Bashforth-Moulton:
for i=5:n,
% Predictie:
y1=(55*fval(4)-59*fval(3)+37*fval(2)-9*...
153
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
fval(1))/24;
y1=ys(4)+h*y1;
x1=x+h; fval(5)=feval(’f’,x1,y1);
% Corectie:
yc=(9*fval(5)+19*fval(4)-5*...
fval(3)+fval(2))/24;
yc=ys(4)+h*yc;
ys(4)=yc;
xval=[xval, x1]; x=x1;
yval=[yval, y1]; y=y1;
end
Funcția va fi aplicată în cadrul exemplului 8.5.
Exemplul 8.5: Să se rezolve prin metoda Adams‐Bashforth‐
Moulton ecuația diferențială prezentată în exemplul 8.3, cu aceeaşi
condiție inițială, pe intervalul x ∈ [0, 2].
Soluție: Se creează din nou fişierul funcție f.m pentru
definirea membrului drept al ecuației diferențiale, urmând execuția
secvenței de program Matlab care apelează funcția fabm pentru
două valori ale pasului de discretizare: h=0.25 şi h=0.2:
[xval1,yval1]=fabm(’f’,0,2,0,0.25);
[xval2,yval2]=fabm(’f’,0,2,0,0.2);
% Reprezentari grafice:
plot(xval1,yval1,'k-.',xval2,yval2,'k-')
grid; xlabel('x'); ylabel('y');
title('h=0.2 ---- h=0.25 -.-.-')
hhh=gcf;
set(hhh,'color',[1 1 1]);
În fig.8.5 este prezentat rezultatul executării programului sub
forma graficelor aferente celor două soluții ale ecuației diferențiale.
154
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Fig.8.5. Două variante de soluții ale ecuației diferențiale din exemplul
8.5 cu metoda Adams‐Bashforth‐Moulton de ordinul 4.
Pot fi observa diferențe între cele două soluții datorită
diferențelor dintre paşii de integrare. În plus, valorile relativ mari ale
celor doi paşi de integrare conduc rezolvarea problemei spre
instabilitate numerică.
8.6. Rezumat
Metodele de integrare numerică se împart în două categorii în
funcție de numărul de puncte utilizate anterior punctului current (xi,
yi):
metode monopas (cu paşi separați), care la determinarea lui
yi utilizează informațiile referitoare numai la un singur punct
anterior, corespunzător lui xi−1;
metodele multipas (cu paşi legați), care la determinarea lui yi
utilizează informațiile referitoare la mai multe puncte
anterioare, corespunzătoare lui xi−1, xi−2, … .
Pentru ambele categorii de metode sunt utilizate două clase de
algoritmi:
algoritmi expliciți (direcți), la care punctul curent nu apare în
expresia funcției g;
155
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
algoritmi impliciți (iterativi, de tip predictor‐corector), la
care punctul curent apare în expresia lui g.
Comparativ cu metodele monopas, metodele multipas prezintă
următoarele avantaje:
estimarea erorii de trunchiere este relativ simplă, eroarea de
trunchiere fiind semnificativ mai mică;
propagarea erorilor este mai redusă, fiind îmbunătățite
precizia şi stabilitatea numerică;
nu este necesar calculul valorilor funcției f(x, y) în puncte
intermediare suplimentare.
Dezavantajele metodelor multipas față de cele monopas sunt
următoarele:
nu este asigurată autopornirea deoarece la primii paşi nu
sunt disponibile informațiile din punctele anterioare, aceste
fiind motivul pentru care sunt utilizate de regulă pentru
pornire metode monopas cu eroare de trunchiere de acelaşi
ordin de mărime;
modificarea pasului de integrare h (este vorba în primul rând
despre reducerea acestuia, efectuată în vederea creşterii
preciziei) se face relativ dificil, fiind necesare reveniri la
puncte deja determinate sau reporniri cu metode monopas;
la unele variante poate creşte volumul de calcule.
Rezolvarea ecuațiilor diferențiale ordinare de ordin superior poate fi
redusă, prin introducerea unor funcții, la rezolvarea unor sisteme de
ecuații diferențiale ordinare de ordinul întâi.
În sens restrâns se spune că o problemă este bine condiționată dacă
mici variații în datele problemei provoacă doar mici variații în soluție.
În caz contrar, se spune că problema este rău condiționată.
În sens restrâns, se spune că un algoritm este numeric stabil dacă nu
introduce o sensibilitate mai mare în raport cu datele decât cea
inerentă problemei, adică nu înrăutățeşte condiționarea problemei
asociate algoritmului. Altfel spus, [V1]), un algoritm este numeric
stabil dacă rezultatul calculat de acesta este – sau este apropiat de –
soluția exactă cu mici perturbații a problemei inițiale.
Dacă problema numerică este bine condiționată, atunci soluția
calculată de un algoritm numeric stabil este apropiată de soluția
exactă. Pentru mulți algoritmi – în particular, pentru cei destinați
rezolvării numerice a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare – stabilitatea numerică poate fi demonstrată matematic şi
exprimată sub forma unor condiții de stabilitate.
156
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Erorile de trunchiere depind de metoda numerică aleasă. Pentru
metodele numerice analizate în cadrul capitolului erorile de
trunchiere sunt:
de ordinul de mărime al lui h2 pentru versiunea clasică a
metodelor de tip Euler şi de ordinul de mărime al lui h3
pentru versiunea Cauchy a metodelor de tip Euler;
de ordinul de mărime al lui h5 pentru metodele de tip Runge‐
Kutta de ordinul 4;
de ordinul de mărime al lui h5 pentru metodele de tip Adams‐
Bashforth‐Moulton de ordinul 4.
Erorile de rotunjire depind de posibilitățile echipamentului de calcul
pe care sunt implementați algoritmii de rezolvare a metodelor
numerice. Aceste erori pot fi diminuate dacă se utilizează modul de
lucru în dublă precizie. Cu toate acestea, erorile de rotunjire cresc pe
măsura creşterii numărului de paşi de integrare datorită propagării
erorilor de la un pas la altul.
Legat de erorile de propagare, efectul lor este simțit mai ales la
metodele de tip predictor‐corector. Este important să fie utilizate
numai metode numeric stabile, la care erorile nu se propagă în mod
imprevizibil sau chiar nemărginit.
Pentru reducerea erorilor de trunchiere este recomandată
micşorarea pasului de integrare, însă aceasta conduce la creşterea
erorii de rotunjire. Pe de altă parte, micşorarea pasului de integrare
conduce la creşterea numărului de paşi, cu consecința imediată a
creşterii timpului de calcul. Deci, trebuie căutată – ca o soluție de
compromis – acea valoare a pasului de integrare pentru care erorile
de calcul (“suma” celor trei tipuri de erori menționate) să fie cât mai
mici.
Ținând seama legătura dintre mărimea pasului de integrare şi cea a
erorilor de calcul, alegerea unei anumite metode de rezolvare
numerică a ecuațiilor diferențiale ordinare reprezintă o problemă
relativ complexă, autorii sugerând utilizarea următoarelor
recomandări:
Dacă se cer rezolvări rapide, atunci se poate alege o metodă
simplă, de tip Euler, cu un pas de integrare relativ mic, dar cu
o valoare absolută mult superioară celui mai mic număr
posibil a fi reprezentat în echipamentul de calcul.
Dacă se cer rezolvări precise fără a fi important timpul de
calcul, atunci se poate alege metoda Runge‐Kutta de ordinul
4 datorită avantajelor legate de autopornire.
157
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
Dacă se cer rezolvări precise fără modificări semnificative ale
pasului de integrare, atunci se poate alege metoda Adams‐
Bashforth‐Moulton de ordinul 4 datorită avantajelor legate
de stabilitate numerică.
La toate metodele numerice utilizate este necesară analiza
stabilității numerice deoarece toate trebuie să fie numeric
stabile. Dacă aceasta nu poate fi efectuată teoretic, atunci
trebuie testată în funcție de aplicație.
În afara recomandărilor amintite, alegerea unei anumite metode
numerice depinde de experiența utilizatorului şi de aplicație.
8.7. Probleme propuse
1. Să se rezolve, aplicând două metode de soluționare
numerică, următoarele ecuații diferențiale ordinare, apoi să se
compare şi să se discute rezultatele obținute:
a) xy ′ − y + x = 0, x ∈ [1; 2], y (1) = 1 ;
e −1
b) y ′ + 2 xy = x 3 , x ∈ [0; 1], y (0) = ;
2
4
c) y ′ − y = x y, x ∈ [1; 2], y (1) = 2 ;
x
d) y ′ + y 3 = x 2 + 1, x ∈ [0; 1], y (0) = 0 ;
y
e) y ′ − = x, x ∈ [1; 2], y (1) = 2 ;
x
f) y ′ = y 2 + x 2 + 1, x ∈ [0; 1], y (0) = 0 .
2. Să se rezolve, aplicând două metode de soluționare
numerică, următoarele ecuații diferențiale ordinare, apoi să se
compare şi să se discute rezultatele obținute:
a) y ′′ + xy ′ − y + x = 0, x ∈ [1; 2], y (1) = 1, y ′(1) = 0 ;
e −1
b) y ′′ + y ′ + 2 xy = x 3 , x ∈ [0; 1], y (0) = , y ′(0) = 0 ;
2
4
c) y ′′ − y ′ − y = x y , x ∈ [1; 2], y (1) = 2, y ′(1) = 1 ;
x
d) y ′′ − y ′ + y 3 = x 2 + 1, x ∈ [0; 1], y (0) = 0 y ′(0) = 1 ;
158
Rezolvarea numerică a ecuațiilor şi sistemelor de ecuații diferențiale
ordinare
y
e) y ′′ + y ′ = + x, x ∈ [1; 2], y (1) = 2 y ′(1) = 0 ;
x
f) y ′′ − y ′ = y 2 + x 2 + 1, x ∈ [0; 1], y (0) = 0 y ′(0) = 1 .
159