Sunteți pe pagina 1din 10

13

ECUA TII DIFEREN TIALE ORDINARE


11.1 Introducere
Importanta multe legi ale zicii au formul ari diferentiale.
Ecuatiile de miscare ale mecanicii clasice, ecuatiile difuziei si transportului de c aldur a,
ecuatia lui Schrdinger etc.
Exemplu: ecuatia de miscare a unei particule de mas a m ntr-un cmp de forte F(x):
m
d
2
x
dt
2
= F(x).
Denind impulsul particulei
p = m
dx
dt
,
ecuatia de miscare dou a ecuatii de ordinul nti (ecuatiile lui Hamilton):
dx
dt
=
p
m
,
dp
dt
= F(x).
Este sucient a considerarea metodelor de rezolvare pt. ecuatii sau sisteme de ecuatii de
ordinul nti.
Sistem de ecuatii diferentiale de ordinul nti:
y
0
i
(x) = f
i
(x, y
1
(x), y
2
(x), . . . , y
n
(x)), i = 1, 2, . . . , n.
Ecuatie diferential a de ordinul n,
y
(n)
= f(x, y, y
0
, . . . , y
(n1)
),
Considernd ca necunoscute
y
1
y(x), y
2
y
0
(x), . . . y
n
y
(n1)
(x)
sistem de n ecuatii diferentiale de ordinul nti:

y
0
i
(x) = y
i+1
(x), i = 1, 2, . . . , n 1
y
0
n
(x) = f(x, y
1
(x), y
2
(x), . . . , y
n
(x)).
Sistemul sub form a matricial a
y
0
(x) = f(x, y),
cu
y =
_

_
y
1
(x)
y
2
(x)
.
.
.
y
n
(x)
_

_
, f(x, y) =
_

_
f
1
(x, y
1
(x), . . . , y
n
(x))
f
2
(x, y
1
(x), . . . , y
n
(x))
.
.
.
f
n
(x, y
1
(x), . . . , y
n
(x))
_

_
.
Tipuri de probleme:
probleme cu condi tii ini tiale sau probleme Cauchy conditii suplimentare ntr-un
punct initial x
0
,
y(x
0
) = y
0
.
Rezolvarea determinarea progresiv a a solutiei pe o retea de puncte x
0
, x
1
, x
2
, . . .,
x
max
.
Tipuri de metode:
metode directe (pas cu pas, sau unipas) solutia la un pas x
m
numai pe baza
informatiilor din nodul anterior, x
m1
, si, eventual, din intervalul [x
m1
, x
m
].
metodele Euler si Runge-Kutta
metode indirecte (sau multipas) solutia la un pas x
m
pe baza informatiilor
de la mai multi pasi anteriori x
m1
, x
m2
, . . .
metodele Adams-Moulton, Milne, Fox-Goodwin si Numerov.
probleme cu condi tii la limit a bilocale sau problemele de tip Dirichlet conditii
asupra valorilor solutiei si derivatelor la capetele unui interval [x
min
, x
max
].
2
13.2 Metoda dezvolt arii n serie Taylor
Importanta furnizeaz a criterii pentru evaluarea preciziei metodelor de interes practic.
Fie problema Cauchy:
y
0
= f(x, y),
y(x
0
) = y
0
.
Dezvoltarea solutiei n serie Taylor n vecin atatea lui x
0
:
y(x) = y(x
0
) +
x x
0
1!
y
0
(x
0
) +
(x x
0
)
2
2!
y
00
(x
0
) + . . .
Propagarea solutiei de la punctul de retea x
m
la punctul x
m+1
:
y
m+1
= y
m
+ hy
0
m
+
h
2
2
y
00
m
+ . . . ,
cu
h = x
m+1
x
m
.
Cu ct h este mai mic, seria converge mai rapid si y
m+1
aproximeaz a mai bine valoarea
exact a y(x
m+1
) a solutiei.
Din ecuatia diferential a
y
0
m
= f(x
m
, y
m
).
Derivnd ambii membri ai ecuatiei diferentiale
y
00
m
=

f
x
+
f
y
y
x

x
m
,y
m
=

f
x
+ f
f
y

x
m
,y
m
.
Rezult a formula de propagare
y
m+1
= y
m
+ hf(x
m
, y
m
) +
h
2
2

f
x
+ f
f
y

x
m
,y
m
+ O(h
3
).
Metod a direct a, de tip explicit.
Denitia 13.1 O metod a este de ordinul p dac a furnizeaz a o solu tie echivalent a cu dez-
voltarea Taylor a solu tiei exacte pn a la termeni de ordinul h
p
.
3
13.3 Metoda lui Euler (metoda liniilor poligonale)
Aproximatia liniar a a metodei dezvolt arii n serie Taylor:
y
m+1
= y
m
+ hf(x
m
, y
m
), m = 0, 1, 2, . . . ,
cu
h = x
m+1
x
m
.
Metod a direct a de ordinul 1, de tip explicit
y
x x
m
x
0
x
1
y
m
y
0
y
1
x
m+1
y
m+1
y y x = ( )
h
. . .
FIGURA 13.1. n metoda Euler se aproximeaz a solutia exact a cu o linie poligonal a.
Erorile de trunchiere si de rotunjire se propag a de la un pas la altul.
Algoritmul predictor-corector al lui Euler (metod a de ordinul 2):
1. se calculeaz a valoarea predictor y
p
m+1
din formula predictor:
y
p
m+1
= y
m
+ hf(x
m
, y
m
),
2. se calculeaz a recurent valoarea corector y
c
m+1
din formula corector
y
c
m+1
= y
m
+
h
2

f(x
m
, y
m
) + f(x
m+1
, y
p
m+1
)

.
nlocuind de ecare dat a y
p
m+1
cu valoarea anterioar a y
c
m+1
, pn a cnd se obtine
precizia dorit a

y
c
m+1
y
p
m+1

, > 0.
4
13.4 Metodele Runge-Kutta
Propriet ati:
metode directe (pas cu pas) posibilitatea autopornirii.
solutia prin metoda Runge-Kutta de ordinul p este echivalent a cu dezvoltarea n
serie Taylor pn a n h
p
.
necesit a numai evaluarea functiei f(x, y), nu si a derivatelor.
Fie ecuatia:
y
0
= f(x, y).
Propagarea solutiei prin metoda dezvolt arii n serie Taylor:
y
m+1
= y
m
+ hf(x
m
, y
m
) +
h
2
2

f
x
+ f
f
y

xm,ym
+ . . .
Se caut a o formul a de propagare care s a depind a de f(x, y), dar nu si de derivatele sale:
y
m+1
= y
m
+
p
X
i=1
w
i
k
i
,
_

_
k
i
= hf(
i
,
i
)

i
= x
m
+
i
h

i
= y
m
+
i1
X
j=1

ij
k
j
.
Se alege:

1
= 0,
11
= 0,
1
= x
m
,
1
= y
m
.
Rezult a:
_

_
k
1
= hf(x
m
, y
m
)
k
2
= hf(x
m
+
2
h, y
m
+
21
k
1
)
k
3
= hf(x
m
+
3
h, y
m
+
31
k
1
+
32
k
2
)

Metoda Runge-Kutta p = 1:
y
m+1
= y
m
+ hf(x
m
, y
m
)
metoda lui Euler.
5
Metoda Runge-Kutta p = 2:
y
m+1
= y
m
+ w
1
k
1
+ w
2
k
2
,

k
1
= hf(x
m
, y
m
)
k
2
= hf(x
m
+
2
h, y
m
+
21
k
1
),
sau
y
m+1
= y
m
+ w
1
hf(x
m
, y
m
) + w
2
hf(x
m
+
2
h, y
m
+
21
hf(x
m
, y
m
)).
Dezvolt am dup a puterile lui h:
y
m+1
= y
m
+ (w
1
+ w
2
)hf(x
m
, y
m
) + h
2

w
2

2
f
x
+ w
2

21
f
f
y

x
m
,y
m
.
Comparnd cu dezvoltarea n serie rezult a:
_
_
_
w
1
+ w
2
= 1
w
2

2
= 1/2
w
2

21
= 1/2.
Nu are solutie unic a solutie posibili a:

2
=
21
= 1
w
1
= w
2
= 1/2.
Formulele metodei Runge-Kutta de ordinul doi:
y
m+1
= y
m
+
1
2
(k
1
+ k
2
),
unde

k
1
= hf(x
m
, y
m
)
k
2
= hf(x
m
+ h, y
m
+ k
1
),
sau
y
m+1
= y
m
+
h
2
[f(x
m
, y
m
) + f(x
m
+ h, y
m
+ hf(x
m
, y
m
))].
algoritmul predictor-corector al lui Euler (formula predictor nlocuit a n cea corector).
Metoda Runge-Kutta p = 4 (varianta cea mai important a):
y
m+1
= y
m
+
1
6
(k
1
+ 2k
2
+ 2k
3
+ k
4
), m = 0, 1, 2, . . . ,
cu
_

_
k
1
= hf(x
m
, y
m
)
k
2
= hf(x
m
+ h/2, y
m
+ k
1
/2)
k
3
= hf(x
m
+ h/2, y
m
+ k
2
/2)
k
4
= hf(x
m
+ h, y
m
+ k
3
).
Eroarea de trunchiere:

T
= Kh
5
.
6
Sisteme de ecuatii diferentiale de ordinul nti:
y
0
i
(x) = f
i
(x, y
1
(x), y
2
(x), . . . , y
n
(x)), i = 1, 2, . . . , n,
Formulele Runge-Kutta p = 4:
y
m+1,i
= y
m,i
+
h
6
h

f
1,i
+ 2(

f
2,i
+

f
3,i
) +

f
4,i
i
, i = 1, 2, . . . , n,
cu
_

f
1,i
= f
i
(x
m
, {y
m,i
})

f
2,i
= f
i
(x
m
+ h/2, {y
m,i
+ (h/2)

f
1,i
})

f
3,i
= f
i
(x
m
+ h/2, {y
m,i
+ (h/2)

f
2,i
})

f
4,i
= f
i
(x
m
+ h, {y
m,i
+ h

f
3,i
}).
#include "memalloc.h"
/*=========================================================================*/
void RungeKutta(float x, float h, float y0[], float y[], int n,
void Func(float,float[],float[]))
/*---------------------------------------------------------------------------
Utilizeaza metoda Runge-Kutta de ordinul 4 pentru a propaga solutia unui
sistem de ecuatii diferentiale ordinare de ordinul 1
y[i] = f[i](x,y[1],...,y[n]), i = 1..n
x - punctul initial
h - distanta pe care este propagata solutia
y0[] - valorile componentelor solutiei in punctul initial x
y[] - valorile solutiei propagate in punctul x + h
n - numarul ecuatiilor diferentiale
Func - rutina utilizator care returneaza membrii drepti f[i](...) ai
ecuatiilor; definitie:
void Func(float x, float y[], float f[]);
---------------------------------------------------------------------------*/
{
int i;
float h2, h6;
float *f1, *f2, *f3, *f4;
f1 = Vector(1,n);
f2 = Vector(1,n);
f3 = Vector(1,n);
f4 = Vector(1,n);
h2 = 0.5*h;
Func(x,y0,f1);
for (i=1; i<=n; i++) y[i] = y0[i] + h2*f1[i];
Func(x+h2,y,f2);
for (i=1; i<=n; i++) y[i] = y0[i] + h2*f2[i];
Func(x+h2,y,f3);
for (i=1; i<=n; i++) y[i] = y0[i] + h *f3[i];
Func(x+h,y,f4);
h6 = h/6.0;
for (i=1; i<=n; i++)
y[i] = y0[i] + h6*(f1[i] + 2*(f2[i] + f3[i]) + f4[i]);
FreeVector(f1,1);
FreeVector(f2,1);
FreeVector(f3,1);
FreeVector(f4,1);
}
7
Exemplu:
y
00
+ y = 0
cu conditiile initiale:

y(x
0
) = y
0
y
0
(x
0
) = y
0
0
.
Solutia general a: y(x) = Asinx + B cos x.
Forma echivalent a a ecuatiei sistem de dou a ecuatii de ordinul nti:

y
0
1
= y
2
y
0
2
= y
1
,
cu conditiile initiale:

y
1
(x
0
) = y
0
y
2
(x
0
) = y
0
0
.
Caz particular:
y
1
(0) = 0,
y
2
(0) = 1,
solutia
y
1
(x) = sin x,
y
2
(x) = cos x.
8
/*---------------------------------------------------------------------------
Rezolva un sistem de ecuatii diferentiale ordinare de ordinul 1 prin metoda
Runge-Kutta de ordinul 4
---------------------------------------------------------------------------*/
#include <math.h>
#include "memalloc.h"
/*=========================================================================*/
void Func1(float x, float y[], float f[])
/*---------------------------------------------------------------------------
Returneaza membrii drepti ai sistemului de ecuatii diferentiale
---------------------------------------------------------------------------*/
{
f[1] = y[2];
f[2] = -y[1];
}
/*=========================================================================*/
void RungeKutta(float x, float h, float y0[], float y[], int n,
void Func(float,float[],float[]))
{
. . . . . . . . . .
}
/*=========================================================================*/
void main()
{
int i, n;
float h, x, xmin, xmax;
float *y, *y0;
printf("n = "); scanf("%i",&n); /* ordinul sistemului */
y0 = Vector(1,n);
y = Vector(1,n);
printf("xmin = "); scanf("%f",&xmin); /* domeniul de integrare */
printf("xmax = "); scanf("%f",&xmax);
for (i=1; i<=n; i++) /* conditiile initiale */
{ printf("y0[%i] = ",i); scanf("%f",&y0[i]); }
printf("h = "); scanf("%f",&h); /* pasul */
printf(" x y\n");
x = xmin;
while (x < xmax) { /* ciclul de propagare */
RungeKutta(x,h,y0,y,n,Func1);
x += h; /* actualizeaza */
for (i=1; i<=n; i++) y0[i] = y[i]; /* conditiile initiale */
printf("%10f",x);
for (i=1; i<=n; i++) printf("%10f",y[i]);
printf("\n");
}
FreeVector(y0,1);
FreeVector(y ,1);
}
9
Bibliography
[1] C.W. Gear, Numerical Initial Value Problems in Ordinary Dierential Equations
(Prentice-Hall, Englewood Clis, NJ, 1971).
[2] L.Gr. Ixaru, Metode numerice pentru ecua tii diferen tiale cu aplica tii (Editura Acad-
emiei, Bucuresti, 1979).
[3] J. Stoer si R. Bulirsch, Introduction to Numerical Analysis (Springer-Verlag, New
York, 1980).
[4] M. Toma si I. Od agescu, Metode numerice si subroutine, Editura tehnic a, Bucuresti,
1980).
[5] W.H. Press, S.A. Teukolsky, W.T. Vetterling si B.P. Flannery, Numerical Recipes in
C: The Art of Scientic Computing, Second Edition (Cambridge University Press,
Cambridge, 1992).

S-ar putea să vă placă și