Sunteți pe pagina 1din 29

Cuprins

Introducere

2

1. Metoda Taylor

4

2. Metoda de tip Runge-Kutta

5

3. Metoda Runge-Kutta pentru s = 2

6

4. Metoda Runge-Kutta pentru s = 3

8

5. Metoda Runge-Kutta pentru s = 4

10

6. Alegerea pasului la rezolvarea ecuaţiilor diferenţiale

11

7. Convergenţa metodelor Runge-Kutta

13

8. Rezolvarea ecuaţiilor de ordin superior

14

9. Rezolvarea sistemelor de ecuaţii diferenţiale de ordinul doi. Metodele Vogelaere şi Adams Störmer

16

10. Implimentarea metodei Runge Kutta în C++

20

Concluzie

28

Bibliografie

29

1

Introducere

Martin Wilhelm Kutta- matematician german, născut la 3 nioembrie 1867 în Piţhena, Silezia de Sus. Kutta reprezintă co-autorul al unei familii celebre de metode de integrare aproximativă de ecuaţii diferenţiale ordinare (Metoda Runge-Kutta). Deasemenea Martin W. Kutta este renumit datorită studierii aerodinamice si conditiilor aerodinamice.

Şi-a facut studiile în Universitatea Breslaviana începînd cu anii 1885 pîna în anul 1890 apoi îşi continua studiile in Munhen pînă in anii 1894, unde a şi devenit asistentul lui V. Dica. Începînd cu anul 1898 îşi începe activitatea în Universitatea Cambridge. Kutta a devenit profesor în Ştutgart în anul 1911, unde şi-a continuat munca pîna a ieşi la pensie în anul 1935. Iar din viaţă se stinge la 25 decembrie 1944 în Fürstenfeldbruck, Germania.

Carl David Tolmé Runge s-a nascut la 30 august, Bremen, matematician german, fizician şi spectrascopist. Primii ani din viaţa sa şii petrece în Gavana, unde tatăl sau Iulius Runge era consol Danez. Mai tîrziu familia se mută cu traiul în Bremen unde tatăl sau se stinge din viaţă în 1864.

Işi face studiile în Universitatea din Berlin sub egida lui Karl Weierstrass, în 1880 obţine treapta de doctor în filosofie cu specializarea în matematică, şi în anul 1886 obţine titlu de profesor matematic în Universitatea din Hanovra. În anul 1904 la iniţiativa lui Felix Klein Runge este invitat în Universitatea Georg-August din Göttingen, unde conduce din nou catedra de Matematica Aplicată. Din punct de vedere istoricesc a fost considerat primul matematician german specializat în aceasta disciplină. În Göttingen împreuna cu Martin Wilhelm Kutta a reluat studiierea metodelor de integrare numerică a ecuaţiilor diferenţiale ordinare în prezent Metoda Runge-Kutta.

A studiat comportamentul polinomului de interpolare prin mărirea gradului polinomului numit Fenomenul Runge. În domeniul analizei funcţionale a cercetat aproximarea funcţiilor olomorfe numită teorema Runge. O lucrare celebră a lui Runge în analiza vectorială este vector Laplace- Runge- Lenz.

Marele matematician se stinge din viata la 3 ianuarie 1927 în Göttingen.

Date generale despre metoda Runge-Kutta : Metoda Runge-Kutta reprezintă o familie importantă de algoritmi numerici pentru rezolvarea ecuaţiilor si sistemelor de ecuaţii diferenţiale. Aceste metode iterative implicite si explicite de calculare aproximativă au fost create în jurul anilor 1900 de catre matematicienii germani Runge si Kutta. Formal acestă metodă reprezintă metoda lui Euler modificată si imbunătătită. Ele reprezintă scheme de ordinul doi de aproximatie. Exista scheme standarte de ordinul trei care n-au primit o largă raspindire. Cel mai des folosita si realizata in diferite pachete matematice : Maple, MathCAD, Maxima schema standartă de ordinul patru. Uneori pentru efectuarea calculelor cu aproximatie inaltă se folosesc schemele de ordinul cinci si şase. Construirea schemei de un ordin mai mare este legată de dificultatile de calcul. Metodele de ordinul şapte trebuie sa aibă cel puţin nouă paşi de rezolvare, iar schemele de ordinul opt constau din 11 paşi. Deşi schemele de ordinul noua nu au importanţa practică, nu

2

se ştie cite etape sunt necesare pentru a obţine acest ordin de aproximare. O asemenea problemă exista pentru schemele de ordin mai mari sau egale decît zece.

Avantaj: asigură îmbunătăţirea în continuare a preciziei şi a erorii de trunchiere pe un pas de integrare.

Consideraţii generale : Ecuaţiile diferenţiale ordinare (sau ecuaţiile diferenţiale care conţin ca necunoscute funcţii care depind de o singură variabilă independentă) se întalnesc în mod curent în descrierea fenomenelor din natura. Funcţiile necunoscute pot viteze, temperaturi, densiti, sarcini electrice, etc. Variabila independentă este în multe cazuri timpul, cînd se descriu fenomene evolutive, sau o coordonată spaţială, cînd se descriu fenomene unidimensionale. În ecuaţiile diferenţiale apar derivatele de diverse ordine ale funcţiilor necunoscute. Ordinul cel mai mare al derivatei funcţiei necunoscute dă ordinul ecuaţiei diferenţiale. Dacă avem un sistem de ecuaţii diferenţiale (adică mai multe ecuaţii care conţin mai multe funcţii necunoscute, în număr egal cu numărul ecuaţiilor diferenţiale), ordinul sistemului este egal cu suma ordinelor ecuaţiilor diferenţiale care îl formează. În general, ecuaţia diferenţiala (sau sistemul de ecuaţii diferenţiale) nu determină complet funcţia (sau funcţiile) necunoscută. Pentru a determina complet soluţia, este necesar ca, odată cu ecuaţia (sau sistemul) să se impună un numar de condiţii suplimentare egal cu ordinul ecuaţiei diferenţiale (sau sistemului de ecuaţii diferenţiale).

Deoarece rezolvarea ecuaţiilor de ordin mai mare ca unu se poate reduce la rezolvarea unor sisteme formate numai din ecuaţii diferenţiale de ordinul întai, vom prezenta la ınceput metodele de rezolvare numerică a acestor ecuaţii mai simple. Trebuie spus ca, pana la apariţia calculatoarelor electronice, chiar rezolvarea unei singure ecuaţii diferenţiale de ordinul întai putea ridica dificultaţi mari, de natura practică (volum mare de calcule pentru obţinerea unei precizii acceptabile). Se consideră o funcţie y = y(x), continuă şi derivabilă pe intervalul de definiţie (sau cel puţin pe intervalul pe care se cauta soluţia); fie [a, b] intervalul pe care se caută soluţia. Ecuaţia diferenţiala de ordinul întai se scrie sub forma implicită:

E(x,y,y')=0, unde y'=dy/dx,

X [a,b] fiind variabilă independentă. Se presupune că expresia E(x,y,y') poate explicita în

raport cu derivata de ordinul întii y' obţinand forma explicită y'=f(x,y), funcţia f(x,y) fiind definita şi derivabilă pe un dreptunghi [a,b]x[c,d] R². Funcţia f(x,y) se numeşte funcţie pantă, deoarece în punctul de coordonate (x, y) valoarea ei este egală cu valoarea derivatei întîi a functiei y(x), numeric egală cu panta tangentei la grafic în acest punct. Pentru a determina complet soluţia se dă condiţia suplimentară:

unde

de obicei

= a sau

=

= b.

, y =

;

[a, b],

[c, d] ,

Metode de tip Runge-Kutta : Metodele de tip Euler prezentate sunt explicite şi nu necesită valori de start. Faptul că au un ordin scăzut al erorii de consistenţă conduce la o aplicabilitate limitată. In scopul obţinerii unor metode de ordin ridicat trebuie renunţat fie la proprietatea de a fi unipas şi pastrată liniaritatea, fie viceversa. Metodele de tip Runge-Kutta sunt neliniare şi conservă caracteristicile metodelor unipas, având un ordin ridicat. Ele au trei proprietăţi principale:

3

1. Sunt metode directe, adică pentru determinarea aproximării soluţiei la pasul k+1 avem nevoie

de informaţiile existente în punctul precedent

2. Sunt identice cu seriile Taylor până la termenii hn, unde h este pasul curent iar n este diferit

pentru metode diferite din această familie şi defineşte ordinul metodei.

3. în procesul de calcul nu necesită decât evaluarea funcţiei din memebrul drept pentru diverse

valori x şi y. Nu este nevoie de calculul derivatelor acesteia.

,

.

1. Metoda Taylor

Toate metodele multipas cer cunoaşterea soluţiei în cîteva puncte anterioare. În particular, apare problema startului integrării. De exemplu, pentru algoritmul Adams- Bashforth,

=

+ h (

-

), k=0,1 …

(1.1)

prima iteraţie, k=0, necesită cunoasterea solutiei în x(care intervine în calcularea lui f= f(, y( )) şi în (care intervine atît direct cît şi prin ). Valoarea în o cunoaştem, fiind chiar condiţia iniţiala. Pentru determinarea celorlalte valori de start (în cazul nostru a lui ) se folosesc diferite metode, în particular metoda Euler. În principiu poate fi folosită orice metoda pas cu pas. Dăm aici o astfel de metoda bazată în mod nemijlocit pe seria Taylor. Ea are avantajul ca poate fi folosita dupa dorinţă, cu mai mulţi sau mai puţini termeni, în funcţie de exactitatea cu care vrem să determinam condiţiile de start.

Se porneşte de la seria Taylor a soluţiei ecuaţiei:

= f

(

, y)

(1.2)

în care

Y=(

), f(x,y)= (

)

(1.3)

În legatură cu acest sistem considerăm problema Cauchy care rezolvă (1.1) (sau (1.2)) cu contiţia

iniţială

(a) =

(a) =

(a) =

, sau, matricial

,

,

,

 

Y(a) =

(1.4)

Y(

+ δ) = y(

) + δy'(

) +

y" (

) +

+

(

) + R(

, δ),

(1.5)

Unde restul este R(

, δ)~0(

).

4

Primii doi termeni sînt daţi chiar de ecuaţie; y( ) este condiţia iniţiala iar y'( ) = f( , y( )). Determinarea termenilor următori se face pornind de la ecuaţia de rezolvat pe care o derivăm total în raport cu , de exemplu:

y" = f(

,y)' =

+

y' =

+

f,

(1.6)

unde

şi

sînt derivatele parţiale ale lui f în raport cu

şi, respectiv, y.

Ca exerciţiu, aplicăm acest procedeu pentru ecuaţia (1.2) cu f =

² + y². Se obţine

y"(

) = 2

+ 2y(

² + y²),

y"'(

) = 2 + 4

y + (2

² + 6y²)( ²+ y²), etc.

Făcînd acum =

obţinem y( ) cu acurateţea 0(

se obţin y"(

), y"'(

).

),

, pe care, introducîndu-le în (1.5) pentru δ = h,

Această cale de găsire a valorilor soluţiei poate fi luată şi ca o metodă numerică în sine şi

defapt este folosită uneori ca atare. Mai exact,

dezvoltare în jurul lui , determinîndu-se y( ) şi aşa mai departe. Dificultatea este ceea că trebuie calculate explicit expresiile derivatelor funcţiilor f şi ordinul lor este cu atît mai mare cu cît vrem ca metoda să fie mai exactă. Aceste calcule sînt însa destul de lungi pentru forme mai complicate ale lui f, fapt pentru care metoda Taylor este folosită mai rar.

se dtermină ca mai sus apoi se face o noua

1. Metoda de tip Runge-Kutta

O primă metoda unipas, metoda Taylor, a fost descrisă in §1. Dupa cum am văzut, aplicarea acestui algoritm este deseori greoaie datorită necesitaţii evaluării derivatelor funcţiei f. De aceea ar fi mult mai convenabil daca am putea determina algoritme care, în loc de expresiile f', f", , calculate în fiecare nod, să facă uz numai de expresia lui f. În acest fel nu am mai fi siliţi să calculăm cu mîna expresiile derivatelor, treaba laborioasă şi care necesită multa atenţie.

Metodele de tip Runge-Kutta răspund tocmai acestor necesităţi. Ele îşi propun să gasească soluţia lui (1.2-1.4) pe baza unei relaţii unipas,

unde

=

+

,

este o funcţie care depinde de „istoria” problemei în intervalul [

,

plus, în plus, poate fi scrisă ca o combinaţie liniară

în care

sînt produse de h =

-

=

şi valorile funcţiei f(x,y) în anumite puncte,

5

(2.1)

] şi în

(2.2)

hf(

= ),

 

hf(

= + α

,

+

),

(2.3)

= hf(

+

h,

+

+

),

= hf(

+

h,

+

+

+ δ

),

Etc.

Dacă se găsesc ponderile

,

,

,

,

şi coeficienţii

, dat de (2.1 – 2.2), ordonat în serie de puteri ale lui h să

] cu

, atunci vom spune că am realizat o metodă de tip Runge-Kutta de

,

,

,

,

,

,

,

,

,

,

,

aşa încît

, coincidă în primii N termeni cu dezvoltarea în serie Taylor a soluţiei exacte pe[

aceeaşi condiţie iniţială

ordinul N.

,

-

Anticipînd rezultatele de mai jos, pentru s= 2,3,4 există relaţia simplă N = s.

3. Metoda Runge-Kutta pentru s = 2

Facem s = 2 în dezvoltarea (2.2) şi căutăm valorile lui

Taylor pe

:

,

,

şi

. Dezvoltăm în seria

=hf +

+ (

= hf (

β

) +

+ α

(

,

) = hf (

+ α

,

În care f este f(

,

) iar derivatele ∂ sînt derivatele parţiale ale lui f, calculate în (

Prin urmare metoda cu s = 2 dă soliţia (2.1),

=

+

hf

+

hf

+

(

)+

(

 

).

Scriem acum şi dezvoltarea Taylor a soluţiei exacte

Y(

)

=

y(

+

h)

=

+hf +

(

)

+

*

 

(

) ²+ + …

 

6

+

hf) =

)

(3.1)

,

).

(3.2)

(3.3)

(am presupus că lucrăm cu aceeiaşi condiţie iniţială pe pas, ). Egalăm coeficienţii primelor

puteri ale lui h din (3.2) şi (3.3) :

Coeficienţii lui

: f

+ f

= f sau

 

+

= 1

Coeficienţii lui

:

(

) =

(

) sau , ţinînd seama de independenţa lui

şi

, egalăm numai coeficienţii lor care dau

=

,

=

f de unde

=

,

=

.

(3.5)

Sistemul de trei ecuaţii cu patru necunoscute (3.4 3.5) este subdeterminat.

Dacă luam una din necunoscute ca parametru, să zicem

pentru

şi

:

,

= λ, atunci obţinem soluţii unice

 

= 1 – λ,

=

=

(3.6)

deci algoritmul metodei Runge-Kutta cu s = 2 este :

 
 

=

+

=

+ (1 - λ)

+ λ

(3.7)

Unde

,

 

= hf (

),

(3.8)

= hf (

)

Cu parametru liber λ. Valoarea lui λ nu rezultă dintr-o condiţie suplimentară, de exemplu egalînd coeficienţii lui din (3.2) şi (3.3). De fapt, inspectînd expresiile acestor coeficienţi constatăm că ei nu pot fi egali pentru nici o alegere a lui , , , deoarece de exemplu în (3.2)

mărimea ∙ nu apare deci coeficientul este zero pe cînd în (3.3) coeficientul ei este .

Dacă am impune numai condiţia parţială la egalizare a coeficienţilor lui

obţine, respectiv,

=

cea care asigură cea mai mică eroare de metodă).

am

= de unde, în baza lui (3.5) se gaseste =

este mai bună (adică

,

şi

=

,

=

,

şi deci λ =

. Subliniem însa că acesta nu înseamnă că valoarea λ =

De exemplu, s-ar putea întîmpla ca pentru o altă valoare a lui λ, coeficienţii lui din (3.2) sa fie egal cu întreg coeficientul lui din (3.3) şi nu numai cu suma primilor trei termeni asa cum

implica λ =

.

Prin urmare eroarea de metoda are forma generala

7

 

=

,(

)

(

)

(

)

(

)

-

(3.9)

Faptul ca parametrul λ ramîne la alegerea noastră sugerează că nu este vorba de o metodă Runge- Kutta cu s = 2 ci de o familie de metode, fiecare membru al familiei corespund la un λ.

Această familie are algoritmul (3.7, 3.8) şi eroarea (3.9). Oricare dintre metodele acestei familii este de ordinul N = 2 (vezi (3.9)), adică N = s. A doua observaţie priveşte expresia erorii de metodă (3.9). Această expresie este foarte complicată şi nu poate folosi la o exploatare practică imediată. În afară de anumite cazuri particulare nu se poate face o alegere a lui λ astfel încit sa fie rezonabil de mica. O anumita încercare de a se manevra cu eroarea de metoda va fi prezentata în §6.

Să notăm în încheiere că cel mai des folosit algoritm din aceasta familie este cel cu λ = care

conduce la formula simetrica

 

=

+

*

(

)+

(3.10)

4.

Metodele de tip Runge-Kutta cu s = 3.

 

Soluţia are forma :

 
 

=

+

+

+

(4.1)

unde

,

,

date de (2.3).

Pentru găsirea ponderilor folosim dezvoltarile în puteri ale lui h pentru si , le introducem în (4.1), ordonăm termenii pe care ii identificăm apoi cu coeficienţii dezvoltării soluţiei exacte (3.3). Dezvoltarea pentru este deja scrisă, (3.1). Dezvoltarea pentru este

=

hf

+

(

)

+

*

 

² ²

(

)

+

(4.2)

Egalînd coeficienţii ca şi la metoda precedentă, de astădată pina la

inclusiv, găsim relaţiile:

+

+

= 1,

+

=

,

 

+ (

+

)

=

,

+

=

,

(4.3)

8

+

(

+

)

=

,

+

(

+

=

,

=

=

 

,

.

Din aceste relaţii rezultă imediat că

 

,

=

+

Şi, prin urmare, avem şase relaţii independente pentru opt necunoscute, fixînd doua din necunoscute, rezultă ăn mod unic celelalte şase. De exemplu dacă fixăm şi , putem găsi

,

,

,

,

,

.

Diferenţa între termenii cu

în (3.3) şi (4.1) determină eroarea de metodă :

+(

=

{[

)Df ∙D (

) + (

]

f

)² Df}

+

(

În care D = -

+ f

.

)

f

+

(4.4)

Ajungem la aceeaşi concluzie ca şi în cazul precedent : (i) algoritmul nu este unic determinat (depinzînde de doi parametri pe care îi putem alege arbitrar), (ii) ordinul metodei este N = 3 deci

N = s (iii) formula erorii de metodă este complicată şi neoperativă practic.

Trebuie să subliniem totuşi că neunicitatea algoritmului nu este un fapt prea grav şi trebuie

înteles în sensul că anumite valori ale coeficienţilor , , , ,

mai bun pentru o anumită ecuaţie (o anumită expresie pentru f) iar alte valori ar fi mai bune pentru o alta ecuaţie, însă chiar dacă aplicăm algoritmul cu aceste ultime valori pentru primul caz obţinem tot rezultate de ordinul 0( ) dar, cu coeficienţii erorii ceva mai mari decît dacă am aplica primul algoritm. Există însă un anumit pericol în ceea ce priveşte propagarea erorilor, anume se întîmplă ca pentru anumite valori ale coeficienţilor erorile de rotunjire pe calculator să

se propage prost, fapt asupra căruia vom reveni în paragraful urmator.

ar duce la un algoritm

În încheiere luăm o particularizare :

 

=

,

= 1. Ecuaţiile (4.3) determină unic ceilalţi

parametri : =

=

,

=

,

=

,

= 2,

= -1 deci algoritmul este

 
 

=

+

(

+

) +

,

(4.5)

Cu

 

= hf(

,

),

=hf (

 

),

= hf(

+ h,

 

-

+ 2

)

(4.6)

9

Algoritmul (4.5 – 4.6) se mai numeşte şi algoritmul Kutta

5. Metode de tip Runge-Kutta cu s = 4.

Se scrie soluţia aproximativă sub forma

=

+

+

+

+

(5.1)

În care

, coincidă în seriile de puteri ale lui h pentru

,

si

,

sînt de forma (2.3 2.3) şi apoi se cauta valorile numerice

,

,

,

,

şi

si y(

în aşa fel ca termenii pîna la ).

inclusiv să

,

,

,

ale lui

Se gaseşte, ca şi înainte, ca se pot genera mai multe seturi de valori pentru algoritm şi ca eroarea de metoda este de ordinul adică N = s. Dintre aceste variante în practică sînt folosite cîteva cazuri particulare :

(i)

Metoda Runge-Kutta standart, cu :

 

= =

 

=

=

 

,

,

 

= = ,

 

=

=

,

= = 1,

=

=

= 0.

(ii)

Metoda Runge-Kutta-Gill cu parametrii

 

= =

 
 

,

 

= (

 

),

=

(

),

=

=

=

 

,

 

= 1,

=

(

- 1),

= 0,

= 1 -

,

= -

,

= 1 +

.

(iii)

Metoda Kutta de trei optimi, cu parametrii :

 

=

=

=

=

 

,

,

=

=

,

=

,

=

=

=

= 1,

10

= -

,

= - 1.

Un studiu comparativ al acestor variante este făcut în ceea ce priveşte acurateţea şi necesităţile de memorie. Se arată că varianta (ii) este mai bună în ceea ce priveşte memoria, cerînd un număr mai mic de alocaţii. De asemenea, algortmul lui (ii) poate fi astfel scris ca să diminueze puternic influenţa erorilor de rotunjire. Această superioritate este totuşi contrabalansată de faptul că timpul de calcul este sensibil mai mare decît la celelalte două variante. Se arată deasemenea că algoritmul (iii) implica pe calculator operaţii ale căror erori de rotunjire ne se compensează una pe alta ca în cazul (ii).

Astfel spus, lucrînd în simplă precizie, metodele (i) şi (iii) dau rezultate afectate mult mai puternic de erorile de rotunjire pe cînd în varianta (ii) abaterea datorită acestora este sensibil mai mică dar timpul de calcul este mai mare. Apare clar că pentru calculatoare cu operaţii rapide în dublă precizie metodele (i) şi (iii) sînt de preferat, iar în caz contrar se preferă metoda (ii). În particular, pentru calculatoarele IBM se recomandă metoda (ii) care este deja programată de către specialiştii firmei.

6. Alegerea pasului la rezolvarea ecuaţiilor diferenţiale.

Metodele unipas au avantajul că, folosind numai informaţiidin nodul imediat anterior, pot folosi pas variabil. O problema mai dificilă a metodelor Runge-Kutta este cea legată de alegerea pasului în funcţie de eroarea pe care o dorim în evaluarea soluţiilor. Această dificultate este urmarea formei complicate a expresiilor erorii de metodă. În practică se repetă calculele cu paşi diferiţi şi se compară rezultatele sau se foloseşte faptul că ordinul metodei este cunoscut (N = s).

O cale ceva mai expeditivă în acesata direcţie constă în folosirea algoritmului Kutta- Merson în care se procedează în felul urmator.

Se definesc marimile

 

,

,

,

,

astfel :

=

+

hf (

,

),

(6.1)

= +

hf (

,

)

+

hf (

h

),

= +

hf (

,

) +

 

hf (

h

),

= +

hf (

,

) -

hf (

 

h

) + 2hf (

 

h

),

= +

hf (

,

) +

 

hf (

h

) +

hf (

+ h,

).

Dacă pasul h este suficient de mic aşa încit f( ,y) poate fi reprezentată prin apoximatie liniară

11

Atunci eroarea în

F(

,y) = A

de la valoarea exactă y(

+ By + C,

), este -

, iar eroarea în

(6.2)

este :

-

deci, cunoscînd

directă a pasului în funcţie de acurateţea pe care o dorim. De exemplu dacă dorim o acurateţe

aşa încit dacă acceptăm pentru valoarea , eroarea este ε(h) = ( - )

şi , avem la dispoziţie valoarea erorii. Acest număr permite ajustarea

E a soluţiei numerice atunci ea va fi obţinuta cu pasul :

= h E

ε h

,

(6.3)

Evident, atunci cînd aproximaţia liniară (6.2) nu poate fi facută cu acurateţe suficientă, formula (6.3) nu mai are o bază teoretica solida. Totuşi aplicarea ei practică se poate face şi în acest caz cu rezultate bune.

Metodele de tip Runge-Kutta sînt larg folosite în practică, uneori ca elemente ale unor algoritme-hibrid.

Unul din ele este algoritmul Stoller-Morrison, un hibrid între metoda Runge-Kutta şi formula lui Gauss.

Formula lui Gauss permite integrarea unei funii g( ) într-un interval [a,b] scriind-o ca

o combinaţie liniară de valori ale lui g în anumite puncte

=

înmultite cu anumite ponderi

,

.

(6.4)

Descrierea formulei, care în esenţă este descrierea reţetelor de găsire a lui şi . Considerînd formula lui Gauss în doua puncte pentru ecuaţia (1.2).

Y(

+ h) y(

) =

=

(

) +

(

)

(6.5)

Şi rezolvînd ecuaţia cu o metodă de tip Runge-Kutta în intervalele [

] şi [

,

], găsim

valorile y(

) şi y(

).

Valorile derivatei sînt, respectiv : y'(

) = f(

, y(

)) şi y'(

) = f(

, y(

)) pe care

înlocuindu-le în (6.5) obţinem valoarea lui y( = + h). Această reţetă defineşte algoritmul hibrid al lui Stoller şi Morrison. Autorii verifică acest algoritm pe cîteva cazuri test şi găsesc rezultate mai bune decît cele obţinute aplicînd metoda Runge-Kutta simplă. Procedeul se poate extinde şi pentru utilizarea formulei Gauss cu mai multe puncte.

Elementele prezentate în §2 – 5 dau o imagine destul de completă asupra metodelor de tip Runge-Kutta, dacă nu tocmai detaliată din punct de vedere matematic, totuşi suficientă pentru cei interesaţi în aplicarea imediată a acestei metode.

Adaptarea mărimii pasului de integrare

Î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

12

variaţii relativ mici ale lui x → este necesar un pas mic. Dar: există funcţii pentru care pot fi prezente ambele tipuri de 2 Metode monopas pentru ecuaţii diferenţiale 11 subdomenii menţionate; pentru acestea: î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ţii necunoscute, y’(x).

7. Convergenţa metodelor Runge-Kutta

Toate metodele de tip Runge-Kutta pot fi scrise sub forma :

=

+ hΦ(

,

, h).

(7.1)

Consistenţa metodei este asigurată dacă Φ( , , 0) = f ( , ) ceea ce se întîmplă

întotdeauna după cum se poate verifica imediat pe expresiile date pentru Φ în cazurile s = 2, 3, 4.

nu sînt investigate datorită pe de o parte complexitaţii calculelor iar pe de

altă parte algoritmelor lungi care ar rezulta şi care le-ar face neeficinte din punct de vedere practic).

(Cazurile s = 5, 6

Teorema următoare stabileşte convergenţa acestor metode :

Teorema : Dacă Ф( , y, h) satisface condiţia lui Lipschitz în raport cu y :

| k (x 1 ,y 1 , h)

(

, y 2 , h)|

L |y 1 - y 2 |

(7.2)

Pentru 0

să fie convergentă este ca ea să fie consitentă.

h

(L o constantă), atunci condiţia necesară şi suficientă pentru ca metoda ( . )

Se verifică simplu că dacă f( , y) este lipschitziană în y, atunci şi condiţia

=

+

(

+

Va fi automat satisfăcut deoarece

= 1

)

Pentru orice metodă de tip Runge – Kutta.

În concluzie metodele de tip Runge - Kutta sînt convergente. Este de subliniat că în cazul acestor metode nu mai este necesar şi studiul stabilitaţii. Acest lucru este legat de faptul că avem de-a face cu metode unipas.

13

8. Rezolvarea ecuaţiilor de ordin superior

Fie dat Problema Cauchy pentru sistemul de m ecuaţii de ordinul s

= F(

, y, y', y'',

,

),

[a, b],

(8.1)

(scris în notaţie matricială ca şi sistemul (1.2)), este de a rezolva acest sistem cu condiţiile iniţiale

y(a) =

, y'(a) =

,

,

(a) =

(8.2)

Acest sistem poate fi scris ca un sistem de m ∙ s ecuaţii de ordinul întii.

Într-adevăr, introducînd matricea coloană Y :

Y = (

În care fiecare y( ), y'(

),

)

, sînt matrici coloană cu m elemente,

Sau pe componente

(

= (

) =

) , p = 0, 1,

, s

- 1

cu t = m(q - 1) + p + 1, q = 1, 2,

Sistemul (8.1) capătă forma echivalentă

Sau, pe componente,

= G(

, y)

Cu

= (x, Y), i = 1, 2,

, m ∙ s

= , i = 1, 2,

= ',

m(s - 1)

,

), j = 1, 2,

Iar condiţiile iniţiale capătă forma simplă

14

,

m, p = 0, 1,

, m

(8.3)

(8.4)

, s 1.

(8.5)

Y(a) =

(8.6)

Prin urmare, pentru orice sistem de m ecuatii de ordin s poate fi gasit un sistem echivalent de m × s ecuaţii de ordinul întii şi, în consecinţă, problema Cauchy poate fi rezolvată aplicînd metodele descrise sistemului echivalent.

De exemplu, sistemul de trei ecuaţii de ordinul doi

=

,

,

,

,

,

),

=

,

,

,

,

,

),

=

,

,

,

,

,

),

Admite un sistem echivaent de p = 2 · 3 = 6 ecuaţii care poate fi scris în forma (8.5), unde :

= , = , = , = , = , = şi = , =
=
,
=
,
=
,
=
,
=
,
=
şi
=
,
=
,
=
,
=
,
,
,
,
,
),
=
,
,
,
,
,
),
=
,
,
,
,
,
),
Cu condiţiile inţiale :
=
,
=
,
=
,
=
,
=
,
=

Această cale de rezolvare bazată pe sitemul echivalent, deşi corectă, este totuşi greoaie din punct de vedere practic datorită numarului mare de ecuaţii în sistemul echivalent. Ea duce atît la cereri mari de memorie pentru stocarea valorilor calculate, cît şi la creşterea puternică a numarului de operaţii care pot rezulta într-o acumulare primejdios de mare a erorilor de rotunjire. De aceea ea este abordată numai atunci cînd nu avem la îndemînă metode specifice. Din fericire, pentru sisteme de ordine mici şi forme particulare pentru F, există astfel de metode.

15

Cazul sistemelor de ecuaţii diferenţiale de ordinul doi este pe departe cel mai interesant pentru problemele practice din ştiinţă şi tehnică şi în literatură există multe metode specifice lui.

9. Rezolvarea sistemelor de ecuaţii diferenţiale de ordinul doi.

Metodele Vogelaere si Adams Störmer

Aceste metode se referă la sistemul de ecuaţii

= f(

, y),

[a,b]

Cu condiţiile iniţiale

y(a) =

, y'(a) =

,

(9.1)

(9.2)

În care am folosit notaţia matricială ca şi pentru problema (1.2 – 1.4). Metoda de Vogelaere constă din următorul algoritm :

= + h

+

(4

-

)

= + 2h

+

(

+

)

(9.3)

= (

+

+

+

)

k = 0, 2, 4,

din informaţiile

de la punctele

relaţie furnizează

şi sînt date de intrare pentru urmatoarea aplicare a algoritmului k k + 2 etc. În

acest mod algoritmul parcurge progresiv nodurile domeniului şi se opreşte în a doua relaţie la k = n –3, dacă n este impar şi, dacă n este par, în prima relaţie la k = n 2.

din ultima relaţie. Numerele

din a doua relaţie. A doua

Algoritmul cuprinde trei relaţii. Pentru un k dat, prima relaţie furnizează

şi

. Acesta este folosit pentru găsirea lui

care este utilizat pentru calculul lui

Valorile

şi

reprezintă soluţia numerică în punctul b =

în cele doua cazuri.

Obţinerea relaţiilor (9.3) se face pornindu-se de la seria Taylor,

y(

) = y(

) + h

y'(

) +

y''(

) +

y'''(

) +

(

) +

 

(9.4)

Pentru soluţia exactă şi

16

f(

) = f(

) - h f'(

) +

f''(

) -

f'''(

) +

(9.5)

pentru funcţia f. În această dezvoltare am folosit o notaţie prescurtată f ( ) însemnînd de fapt f( ,

y( )) iar derivatele sînt derivatele totale în raport cu

.

Calculăm expresia

4f(

) f(

) = 3 (

 

) +

(9.6)

Şi cum

 

y''(

) =

, y'''(

) =

etc., avem

4

- f(

) = 3 (y

y

) +

(9.7)

Introducem această egalitate în expresia soluţiei exacte (9.4) şi obţinem

y(

) = y(

) + h y'(

) +

(4

- f(

)) +

(

) +

(9.8)

din care se vede că formula (9.3) este o bună aproximaţie a soluţiei exacte, primul termen neglijat fiind

=

(

)

(9.9)

Care defineste eroarea de metodă pentru prima relaţie de recurenţă. În mod asemănător se obţin şi celelalte doua relaţii gasindu-se că eroarea de metodă pentru fiecare din ele este proporţională .

cu

În conluzie această metodă asigură obţinerea soluţiei, prin folosirea ansamblului (9.3), cu eroarea de 0( ) la fiecare pas pentru nodurile pare şi 0( ) pentru cele impare. Pentru determinarea valorilor de start şi se foloseşte o metodă auxiliară, de exemplu metoda Taylor. Un mare avantaj al metodei este acela că permite o flexibilitate în varierea mărimii pasului. Într-adevăr, dacă pentru k K 1 folosim pasul iar pentru k K 1 folosind pasul , atunci pentru k+1 = K relaţia (9.3) se înlocuieşte cu o relaţie de legătura

=

+

+

*(

)

+,

(9.10)

Relaţiile (9.3) şi (9.3) rămînînd în aceeaşi formă dar punînd h = . După trecerea acestui nod toate relaţiile (9.3) revin în forma dată, evident cu h = .

Metoda Adams Störmer este o generalizare directă a metodei Adams – Bashforth care constă din următorul algoritm :

Daca p = 1, q = 0, fără a fixa pe r rezultă că :

17

=

+ h*

+

(

)

Se scrie sistemul (9.11) ca un sistem de doua ecuaţii

 

y' = z (x, y),

(9.11)

y'' = z' = f(x,y).

 

Aplicăm algoritmul ( ) pentru (9.11a) :

 
 

- = h (1

 

)

- = h (1

)

De unde

= 2

-

+ h (1

)(

).

(9.12)

Ţinem acum seama de cîteva relaţii din teoria diferenţelor regresive pe care le prezentăm în cele ce urmează :

Fie

avem:

o funcţie dezvoltabilă în seria Taylor în [

]. Pentru

[

g(

)

=

|

+

|

=

(1

 

)

|

=

|

,

]

[

]

unde am notat prin D operatorul de derivare D = . Diferenţa regresivă poate fi scrisă în

funcţie de D :

 
 

=

-

= (1 -

 

)

Sau formal

   

,

 

= 1 -

(9.13)

Dezvoltînd membrul drept în serie Taylor obţinem :

 
 

=

 

+

 

(9.14)

-

+

-

Ridicînd (9.13) la pătrat şi facînd dezvoltarea găsim expresia lui

 

ca serie de puterile lui D :

=

1

= 1 +

- 2

=

-

+

(9.15)

18

Ridicînd (9.13) la cub şi aplicînd dezvoltările în serie găsim

=

-

+

,

(9.16)

şi asa mai departe.

de

Relaţia (9.13) poate fi exploatată şi în mod invers, adică pentru determinarea lui D în funcţie . Avem :

-hD = ln(1 -

) = - (

 

)

(9.17)

sau, luînd puterile succesive :

 

=

+

+

+

+

(9.18)

 

=

+

+

+

(9.19)

etc.

Revenind la formula (9.12) şi scriem ultima paranteză astfel :

 
 

= h *1

hD

+ D

=

=h *1

hD

+

(9.20)

Unde am facut uz de ecuaţia (9.1) scrisă Dz = f.

Folosind formulele (9.17), (9.18), (9.19) şi efectuînd calculele găsim :

1

=

hD

-

+

= 1 -

(1 +

+

-

Care este algoritmul metodei Adams Störmer.

deci formula (9.12) capătă forma finală

+

+

)

(9.21)

Pentru a stabili eroarea metodei se face uz de relaţiile (9.14 – 9.16). De exemplu dacă în algoritmul (9.21) se reţine numai primul termen, atunci eroarea de metodă este

= ~

(

)

=

=

(

)

(9.22)

Valorile de start sînt determinate printr-o metodă adiţională, de exemplu metoda Taylor.

19

10. Implimentarea metodei Runge Kutta în C++

Descrierea metodei:

Se consideră problema diferenţială

y



x

(

y

f

(

x

0

)

y

,

y

0

)

()

Fie că se cere de calculat soluţia ei pe [ x 0 , 0 1] . Presupunem că f (x, y) verifică condiţiile de

existenţă şi unicitate a soluţiei problemei diferenţiale () . Atunci, vom diviza segmentul

x

[

x

0

,

x

0

1]

n
n

h 1

în

n

părţi egale introducând punctele intermediare

(

y

i )

n

i 0

ih ,i 0,n , unde

care e format din valorile soluţiei

x i , i 0,n . Pot fi construite diferite formule pentru determinarea lui

x

i

x

0

. Metoda constă în determinarea unui şir

problemei în punctele

(

y

i

)

n

i 0

. Unele din formule, folosite în lucrarea de faţă, sunt expuse mai jos:

, i 0,n 1

y

i

i

1

y

2

3

K

K

K

4

y y

i

i

(

K

1

2

K

2

2

K

3

1

h f

(

x

i

,

y

f

(

x

i

f

(

f

x

i

(

x

i

h

2

h

2

h

, y

y

y

,

,

i

i

i

i

)

1

6

K

h

 

h

h

K

K

1

2

K

2

2

)

)

K

3

)

4

)

Iniţial se consideră pasul

n  1 h ( ) pentru Dy  y  y h h 2
n  1
h
(
)
pentru
Dy
y
 y
h
h
2

i
i
i

h

h h

Dy  y  y h h 2  i i i h  h 

.

0

. La fiecare pas k 0,1,2,se calculează şirul de valori

până

(

y

h

i

)

n

i 0

,

obţine

Procedeul

se

repetă

când

prima

dată

se

în toate punctele comune. Totuşi, trebuie de limitat numărul de divizări în

caz de neatingere a exactităţii într-un număr acceptabil de paşi, sau de neconvergenţă a metodei.

Exemplu :

Sa se calculeze valoarea aproximativa a sistemului prin metoda runge kutta:

(t)

(t)

= sint;

= cost;

(0) = 0,

Program

(0) = 1.

#include<stdio.h>

#include<stdlib.h>

{

20

, t

#include<conio.h>

#include<math.h> //includerea fisierelor antet

#define x0 0.0 //x0-punctul initial din conditia Cauchy

#define eps 0.000001 //eroarea cu care se rezolva problema

#define a 0.0 // a si b - capetele intervalului

#define b 1.0

struct Vector // definirea tipului vector cu 2 coordonate

{

double y1, y2;

};

Vector *y, *yp, *z; // y - sirul de aproximatii la pasul current, yp - sirul de aproximatii la pasul precedent, z - solutia exacta in noduri

int n, m; //n-numarul de divizari a segmentului [x0,x0+1], returneaza un vector cu coordonatele respective

struct Vector V(double Y1, double Y2)

{

struct Vector v;

v.y1 = Y1;

v.y2 = Y2;

return v;

}

struct Vector f(double x, struct Vector y) //functia din problema Cauchy

{

return V(y.y1 + y.y2 - sin(x), y.y1 - y.y2 - 2 * sin(x) + cos(x));

}

struct Vector g(double x) // solutia exacta

{

return V(sin(x), cos(x));

}

struct Vector prod(struct Vector v, double h) // returneaza produsul v * h

21

{

return V(h * v.y1, h * v.y2);

}

struct Vector sum(struct Vector v1, struct Vector v2) // returneaza v1 + v2

{

return V(v1.y1 + v2.y1, v1.y2 + v2.y2);

}

void copy(struct Vector &v1, struct Vector v2) // copie vectorul v2 in v1

{

 

v1.y1 = v2.y1;

v1.y2 = v2.y2;

}

void Iteratie(int n, struct Vector *y) //se calculeaza aproximatiile y cind segmentul este divizat in n parti egale si solutia exacta in noduri

{

struct Vector K1,K2,K3,K4,delta;

double x[200];

int i;

double h=(b-a)/n; // se determina pasul

y[0]=V(0, 1); // conditia initiala din problema

for(i=0;i<=n;i++) x[i]=x0+i*h; // se determina nodurile

for(i=0;i<n;i++)

{

// formulele Runge-Kutta

K1=prod(f(x[i],y[i]), h);

K2=prod(f(x[i]+h/2.0, sum(y[i], prod(K1, 1.0/2))), h);

K3=prod(f(x[i]+h/2.0, sum(y[i], prod(K2, 1.0/2))), h);

K4=prod(f(x[i]+h, sum(y[i], K3)), h);

delta=prod(sum(sum(sum(K1, prod(K2, 2)), prod(K3, 2)), K4), 1.0/6);

copy(y[i+1], sum(y[i], delta));

22

copy(z[i], g(x[i]));

}

z[n] = g(x[n]);

}

// se calculeaza estimatiile la pasul current daca inca nu s-a atins exactitatea se returneaza 1 in caz contrar

0

int FABS(struct Vector *yp, struct Vector *y, double EPS)

{

for(int i=0;i<=n/2;i++)

{

if(fabs(y[2*i].y1 - yp[i].y1)>=EPS) return 1;

if(fabs(y[2*i].y2 - yp[i].y2)>=EPS) return 1;

}

return 0;

}

void Runge() //se rezolva problema Cauchy aplicind regula lui Runge de dublare a numarului de divizari

{

n=2; // numarul initial de divizari a segmentului

m=1; // numarul de iteratii efectuate

Iteratie(n,y); // se efectueaza o iteratie

do

{

for(int i=0;i<=n;i++) copy(yp[i], y[i]);

n*=2.0; // se dubleaza numarul de divizari

m++; // se numara iteratiile

Iteratie(n,y); // se face o noua iteratie

}

while((FABS(yp,y,eps))&&(m<8));

if(m>=8) printf("Exactitatea nu a fost atinsa\n\n"); else

printf("Au fost necesare %i divizari. h=%.4lf\n",m,1.0/n);

23

}

void main()

{

textmode(C4350); // se face ecranul de 50 linii

clrscr(); // se curata ecranul

long int i;

// alocarea memoriei

y=(struct Vector*)malloc(200*sizeof(struct Vector));

yp=(struct Vector*)malloc(200*sizeof(struct Vector));

z

= (struct Vector*)malloc(200*sizeof(struct Vector));

//

se aplica algoritmul

Runge();

//se afiseaza rezultatele

printf("Pas precedent: Vectorul yp[1]:\n");

for(i=0;i<=n/2;i++)

{

//

se afiseaza prima coordonata a vectorului yp

printf("%12.7lf",yp[i].y1);

if(wherex()>=70) printf("\n"); // daca nr. coloanei consolei (ecranului) e mai mare sau egal cu 70 (din 80 in total) se trece din linie noua

}

printf("\nVectorul yp[2]:\n");

for(i=0;i<=n/2;i++)

{

printf("%12.7lf",yp[i].y2);

if(wherex()>=70) printf("\n");

}

printf("\nUltim pas: Vectorul y[1]:\n");

for(i=0;i<=n;i+=2)

{

24

printf("%12.7lf",y[i].y1);

if(wherex()>=70) printf("\n");

}

printf("\nVectorul y[2]:\n");

for(i=0;i<=n;i+=2)

{

printf("%12.7lf",y[i].y2);

if(wherex()>=70) printf("\n");

}

printf("\nDiferenta: Vectorul D[1]:\n");

for(i=0;i<=n/2;i++)

{

printf("%15.10lf",fabs(y[2*i].y1 - yp[i].y1));

if(wherex()>=66) printf("\n");

}

printf("\nVectorul D[2]:\n");

for(i=0;i<=n/2;i++)

{

printf("%15.10lf",fabs(y[2*i].y2 - yp[i].y2));

if(wherex()>=66) printf("\n");

}

printf("\nSolutia exacta: Vectorul z[1]:\n");

for(i=0;i<=n;i+=2)

{

printf("%12.7lf",z[i].y1);

if(wherex()>=70) printf("\n");

}

printf("\nVectorul z[2]:\n");

for(i=0;i<=n;i+=2)

{

printf("%12.7lf",z[i].y2);

if(wherex()>=70) printf("\n");

}

printf("\nEroarea metodei: Vectorul d[1]:\n");

for(i=0;i<=n;i+=2)

{

printf("%15.10lf",fabs(z[i].y1 - y[i].y1));

if(wherex()>=66) printf("\n");

}

printf("\nVectorul d[2]:\n");

for(i=0;i<=n;i+=2)

{

printf("%15.10lf",fabs(z[i].y2 - y[i].y2));

if(wherex()>=66) printf("\n");

}

getch(); // se mentin rezultatele la ecran pana la apasarea oricarei taste

}

Rezultatul executării programului:

Au fost necesare 5 divizari. h=0.0312 Pas precedent: Vectorul yp[1]:

0.0000000

0.0624593

0.1246748

0.1864033

0.2474040

0.3074386

0.3662726

0.4236764

0.4794257

0.5333028

0.5850975

0.6346073

0.6816390

0.7260089

0.7675438

0.8060815

0.8414714

Vectorul yp[2]:

1.0000000

0.9980475

0.9921976

0.9824733

0.9689124

0.9515679

0.9305076

0.9058136

0.8775825

0.8459245

0.8109631

0.7728349

0.7316889

0.6876856

0.6409969

0.5918051

0.5403024

Ultim pas: Vectorul y[1]:

 

0.0000000

0.0624593

0.1246747

0.1864033

0.2474040

0.3074385

0.3662725

0.4236763

0.4794255

0.5333027

0.5850973

0.6346071

0.6816388

0.7260087

0.7675435

0.8060811

0.8414710

Vectorul y[2]:

1.0000000

0.9980475

0.9921977

0.9824733

0.9689124

0.9515679

0.9305076

0.9058137

0.8775826

0.8459245

0.8109631

0.7728349

0.7316889

0.6876856

0.6409969

0.5918051

0.5403023

Diferenta: Vectorul D[1]:

0.0000000000

0.0000000113

0.0000000234

0.0000000364

0.0000000505

0.0000000660

0.0000000830

0.0000001019

0.0000001227

0.0000001458

0.0000001715

0.0000001999

0.0000002314

0.0000002663

0.0000003049

0.0000003476

0.0000003947

Vectorul D[2]:

26

0.0000000000

0.0000000169

0.0000000306

0.0000000412

0.0000000488

0.0000000534

0.0000000551

0.0000000539

0.0000000498

0.0000000429

0.0000000332

0.0000000207

0.0000000054

0.0000000128

0.0000000339

0.0000000580

0.0000000850

Solutia exacta: Vectorul z[1]:

0.0000000

0.0624593

0.1246747

0.1864033

0.2474040

0.3074385

0.3662725

0.4236763

0.4794255

0.5333027

0.5850973

0.6346071

0.6816388

0.7260087

0.7675435

0.8060811

0.8414710

Vectorul z[2]:

1.0000000

0.9980475

0.9921977

0.9824733

0.9689124

0.9515679

0.9305076

0.9058137

0.8775826

0.8459245

0.8109631

0.7728349

0.7316889

0.6876856

0.6409969

0.5918051

0.5403023

Eroarea metodei: Vectorul d[1]:

0.0000000000

0.0000000008

0.0000000016

0.0000000025

0.0000000034

0.0000000045

0.0000000057

0.0000000070

0.0000000084

0.0000000100

0.0000000118

0.0000000138

0.0000000159

0.0000000184

0.0000000210

0.0000000240

0.0000000273

Vectorul d[2]:

0.0000000000

0.0000000011

0.0000000019

0.0000000026

0.0000000031

0.0000000033

0.0000000034

0.0000000033

0.0000000030

0.0000000025

0.0000000018

0.0000000009

0.0000000001

0.0000000014

0.0000000029

0.0000000045

0.0000000064

27

Concluzie

Metoda Runge-Kutta reprezintă o familie importantă de algoritmi numerici pentru rezolvarea ecuaţiilor si sistemelor de ecuaţii diferenţiale. Aceste metode iterative implicite si explicite de calculare aproximativă au fost create în jurul anilor 1900 de catre matematicienii germani Runge si Kutta. Metodele Runge Kutta fiind considerate ca metode unipas. Metodele unipas (sau pas cu pas) calculează soluţiile în punctul facînd apel numai la informaţiile din nodul imediat anterior , spre deosebire de metodele multipas care necesită valorile în cîteva noduri anterioare.

Printre avantajele acestor metode se numara posibilitatea folosirii pasului variabil, startul

nemijlocit, pe baza condiţiilor iniţiale.

În ceea ce priveşte dezavantajele, acestea provin în general din complexitatea mai mare a

calculelor pentru deducerea algoritmilor respective şi din expresiile destul de complicate ale

algoritmului, ceea ce face ca aplicarea pe calculator a metodelor unipas să ceară timpi de calcul

superiori faţa de metodele multipas.

Avantaje comparativ cu metodele monopas:

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ă (se va reveni); nu este necesar calculul valorilor funcţiei f(x, y) în puncte intermediare suplimentare faţă de cele de tip - = h, I = 0, …, n-1 Dezavantajele metodelor multipas faţă de cele monopas:

- nu este asigurată autopornirea deoarece la primii paşi nu sunt disponibile informaţiile din

punctele anterioare se utilizează 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 de 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.

28

Bibliobrafie :

1)

2) Gheorghe Micula, Paraschiva Pavel “Ecuatii diferentiale si integrale prin problem si exercitii” Editura Dacia, 1989 3) P. Blaga, Sorin Plop “Analiza numerica : Lucrari de laborator” Editura Cluj – Napoca

Liviu Gr. Ixaru “Metode numerice pentru ecuatii diferentiale cu aplicatii”,

1994

29