Sunteți pe pagina 1din 5

© Carmen-Sanda Georgescu, Tudor Petrovici, Radu Popa

Metode numerice. Fisa de laborator nr. 10:


INTEGRAREA NUMERICA A ECUATIILOR DIFERENTIALE DE
ORDINUL I, CU CONDITIE INITIALE (Probleme Cauchy)

7. INTEGRAREA NUMERICĂ A ECUAŢIILOR DIFERENŢIALE ORDINARE


7.1.METODE DIRECTE DE INTEGRARE A ECUATIEI DIFERENTIALE
DE ORDINUL INTAI, CU CONDITIE INITIALA

Fie ecuaţia diferenţială ordinară de ordinul întâi

= y ′ = f ( x, y ) .
dy
(10.1)
dx
Se caută soluţia y( x ) pe intervalul [x0, xf], care să satisfacă ecuaţia (10.1), cu condiţia iniţială:
y ( x0 ) = y 0 . (10.2)
Ecuatia diferentiala (10.1) impreuna cu conditia initiala (10.2) formeaza o problema Cauchy.
Fie x∈[x0, xf] unde xf=xn . Se împarte intervalul [x0, xn] în n subintervale egale, distanţate cu pasul
b−a
h= , cele (n+1) valori discrete fiind x k = x0 + k h , cu k = 0, n .
n
xk x0 x1 ... xn
yk y0 y1 ... yn

7.1.1. METODE DE TIP RUNGE-KUTTA

⇒ RK1 = METODA RUNGE-KUTTA DE ORDINUL INTAI ( METODA EULER)


Solutia ecuaţei diferenţiale de ordinul întâi (10.1) cu conditia initiala (10.2) se obtine prin schema iterativa

y k +1 = y k + h f ( x k , y k ) k=1,2,3, . . . si y(xo)=dat (10.3)


Exemplul 1: Sa se rezolve problema Cauchy y’=(x-y)/2, y(0)=1 pe intervalul [0,1] cu pasul h=0.2 folosind
metoda lui Euler. Notam K1=h*f(xk,yk)
k xk y0=1, yik+1= yk+K1 K1=h*f(xk,yk)
0 0 y0=1 K1 = -0.10000
1 0.2 y1=0.90000 K1 = -0.07000
2 0.4 y2=0.83000 K1 = -0.043000
3 0.6 y3=0.78700 K1 = -0.018700
4 0.8 y4=0.76830 K1 = 0.0031700
5 1 y5=0.77147
Eroarea comisa este de ordinul lui h2 adica 0.04
Program Octave pentru rezolvarea unei ecuatii diferentiale de ordinul I prin metoda lui Euler pe intervalul
x∈[a,b] cu pas h=(b-a)/m si y(a)=y0

octave#1> function [X,Y] = euleredo(f,a,b,y0,m)


h = (b - a)/m;
X = zeros(1,m+1);
X = zeros(1,m+1);
X(1) = a;
Y(1) = y0;
for j=1:m,
Y(j+1) = Y(j) + h*feval(f,X(j),Y(j))
X(j+1) = a + h*j
Endfor
endfunction

octave#1>function z = fedo(x,y) ,z = (x-y)/2;endfunction


octave#1>a=0,b=1,y0=1,m=100, [X,Y]=euleredo("fedo",a,b,y0,m)
Rezultat: y(1)= 0.81731; Eroarea comisa este de ordinul lui 0.0001

⇒RK2 = METODA RUNGE-KUTTA DE ORDINUL AL DOILEA


Solutia ecuaţei diferenţiale de ordinul întâi (10.1) cu conditia initiala (10.2) se obtine prin schema iterativa

⎛ h h ⎞
y k +1 = y k + h f ⎜ x k + , y k + y k′ ⎟ unde y k′ = f (x k , y k ) , k=1,2,3, . . . si y(xo)=dat (10.4)
⎝ 2 2 ⎠
Exemplul 2: Sa se rezolve problema Cauchy y’=(x-y)/2, y(0)=1 pe intervalul [0,1] cu pasul h=0.2 folosind
metoda Runge-Kutta de ordinul II. Notam K1=h*f(xi,yi) si K2=h*f(xk+h/2,yk+K1/2). Atunci solutia se
obtine cu schema iterativa y0=1, yk+1= yk+K2
k Xk y0=1, yk+1= yk+K2 K1=h*f(xi,yi), K2=h*f(xk+h/2,yk+K1/2)
0 0 y0=1 K1 = -0.10000, K2 = -0.085000
1 0.2 y1= 0.91500 K1 = -0.071500, K2 = -0.057925
2 0.4 y2= 0.85708 K1 = -0.045708, K2 = -0.033422
3 0.6 y3= 0.82365 K1 = -0.022365, K2 = -0.011247
4 0.8 y4= 0.81241 K1 = -0.0012406, K2 = 0.0088214
5 1 y5= 0.82123
Program Octave pentru rezolvarea unei ecuatii diferentiale de ordinul I prin metodaRunge-Kutta II, pe
intervalul x∈[a,b] cu pas h=(b-a)/m si y(a)=y0

octave#1> function [X,Y] = rk2(f,a,b,ya,m)


h = (b - a)/m; X = zeros(1,m+1); Y = zeros(1,m+1); X(1) = a; Y(1) = ya;
for j=1:m,
xj = X(j);
yj = Y(j);
k1 = h*feval(f,xj,yj)
k2 = h*feval(f,xj+h/2,yj+k1/2)
Y(j+1) = yj + k2
X(j+1) = a + h*j
endfor
endfunction

octave#1>function z = fedo(x,y) ,z = (x-y)/2;endfunction


octave#1>a=0,b=1,y0=1,m=100, [X,Y]=rk2("fedo",a,b,y0,m)
Rezultat: y(1)= 0.81960

⇒ RK3 = METODA RUNGE-KUTTA DE ORDINUL AL TREILEA


Solutia ecuaţei diferenţiale de ordinul întâi (10.1) cu conditia initiala (10.2) se obtine prin schema iterativa

K1 3 K 3
y k +1 = y k + + (10.5)
4 4
unde
K1 = h f ( x k , y k )
⎛ h K ⎞
K 2 = h f ⎜ xk + , y k + 1 ⎟ (10.6)
⎝ 3 3 ⎠
⎛ 2h 2 K2 ⎞
K 3 = h f ⎜ xk + , yk + ⎟ , k=1,2,3, . . . si y(xo)=dat
⎝ 3 3 ⎠
Exemplul3: Sa se rezolve problema Cauchy y’=(x-y)/2, y(0)=1 pe intervalul [0,1] cu pasul h=0.2 folosind
metoda Runge-Kutta de ordinul III. Notam K1=h*f(xi,yi) si K2=h*f(xk+h/2,yk+K1/2) si
K3=h*f(xk+h/2,yk+K2/2) Atunci solutia se obtine cu schema iterativa y0=1, yk+1= yk+ K1/4+3*K3/4
k Xk y0=1, yk+1= yk+ K1/4 + 3*K3/4 K1=h*f(xi,yi), K2=h*f(xk+h/2,yk+K1/2),K3=h*f(xk+h/2,yk+K2/2)
0 0 y0=1 K1 = -0.10000, K2 = -0.085000, K3 = -0.085750
1 0.2 y1= 0.91069 K1 = -0.071069, K2 = -0.057515, K3 = -0.058193
2 0.4 y2= 0.84928 K1 = -0.044928, K2 = -0.032681, K3 = -0.033293
3 0.6 y3= 0.81307 K1 = -0.021307, K2 = -0.010242, K3 = -0.010795
4 0.8 y4= 0.79965 K1 = 3.4972e-05, K2 = 0.010033, K3 = 0.0095333
5 1 y5= 0.80681
Program Octave pentru rezolvarea unei ecuatii diferentiale de ordinul I prin metoda Runge-Kutta III, pe
intervalul x∈[a,b] cu pas h=(b-a)/m si y(a)=y0

octave#1> function [X,Y] = rk3(f,a,b,ya,m)


h = (b - a)/m;X = zeros(1,m+1);Y = zeros(1,m+1);X(1) = a;Y(1) = ya;
for j=1:m,
xj = X(j);
yj = Y(j);
k1 = h*feval(f,xj,yj);
k2 = h*feval(f,xj+h/2,yj+k1/2)
k3 = h*feval(f,xj+h/2,yj+k2/2)
Y(j+1) = yj + k1/4 +3*k3/4
X(j+1) = a + h*j
endfor
endfunction

octave#1>function z = fedo(x,y) ,z = (x-y)/2;endfunction


octave#1>a=0,b=1,y0=1,m=100, [X,Y]=rk3("fedo",a,b,y0,m)
Rezultat: y(1)= 0.81902

⇒ RK4 = METODA RUNGE-KUTTA DE ORDINUL PATRU (cel mai frecvent utilizată în literatura de
specialitate)
Solutia ecuaţei diferenţiale de ordinul întâi (10.1) cu conditia initiala (10.2) se obtine prin schema iterativa

y k +1 = y k +
1
(K1 + 2 K 2 + 2 K 3 + K 4 ) (10.7)
6
unde
K1 = h f ( x k , y k )
⎛ h K ⎞
K 2 = h f ⎜ xk + , y k + 1 ⎟
⎝ 2 2 ⎠
⎛ h K ⎞
K 3 = h f ⎜ xk + , y k + 2 ⎟ (10.8)
⎝ 2 2 ⎠
K 4 = h f ( x k + h, y k + K 3 ) , k=1,2,3, . . . si y(xo)=dat
Exemplul 4: Sa se rezolve problema Cauchy y’=(x-y)/2, y(0)=1 pe intervalul [0,1] cu pasul h=0.2 folosind
metoda Runge-Kutta de ordinul IV. Notam K1=h*f(xi,yi) si K2=h*f(xk+h/2,yk+K1/2),
K3=h*f(xk+h/2,yk+K2/2) si K4=h*f(xk+h,yk+K3). Atunci solutia se obtine cu schema iterativa y0=1, yk+1=
yk+(1/6)*(K1+2*K2+2*K3+K4)
k Xk y0=1, yk+1= K1=h*f(xi,yi), K2=h*f(xk+h/2,yk+K1/2),K3=h*f(xk+h/2,yk+K2/2)
(1/6)*(K1+2*K2+2*K3+K4)
0 0 y0=1 K1 = -0.10, K2 = -0.0850, K3 = -0.085750, K4 = -0.071425
1 0.2 y1= 0.91451 K1 = -0.07145, K2 = -0.057879, K3 = -0.058557,K4 = -0.04559
2 0.4 y2= 0.85619 K1 = -0.04562, K2 = -0.03333, K3 = -0.03395, K4 = -0.022224
3 0.6 y3= 0.82246 K1 = -0.02224,K2 = -0.01113,K3 = -0.01168,K4 = -0.0010766
4 0.8 y4= 0.81096 K1 = -0.001096,K2 = 0.008958,K3 = 0.008456,K4 = 0.018058
5 1 y5= 0.81959
Program Octave pentru rezolvarea unei ecuatii diferentiale de ordinul I prin metoda Runge-Kutta III, pe
intervalul x∈[a,b] cu pas h=(b-a)/m si y(a)=y0

octave#1> function [X,Y] = rk4(f,a,b,ya,m)


h = (b - a)/m;X = zeros(1,m+1);Y = zeros(1,m+1);X(1) = a;Y(1) = ya;
for j=1:m,
xj = X(j);
yj = Y(j);
k1 = h*feval(f,xj,yj);
k2 = h*feval(f,xj+h/2,yj+k1/2)
k3 = h*feval(f,xj+h/2,yj+k2/2)
k4 = h*feval(f,xj+h,yj+k3)
Y(j+1) = yj + (k1 + 2*k2 + 2*k3 + k4)/6
X(j+1) = a + h*j
endfor
endfunction
octave#1>function z = fedo(x,y) ,z = (x-y)/2;endfunction
octave#1>a=0,b=1,y0=1,m=100, [X,Y]=rk4("fedo",a,b,y0,m)
Rezultat: y(1)= 0.81959

Exemplul 5. Sa se rezolve problema Cauchy pe intervalul x∈[0,1] cu pas h=0.1


y’=y-2*x/y , y(0)=1
folosind metodele lui Euler si Runge-Kutta de ordin 4 (RK4) si sa se compare grafic rezultatele obtinute cu
solutia obtinuta daca se foloseste functia Octave lsode si solutia teoretica y=sqrt(2*x+1)
X=
0.00000 0.10000 0.20000 0.30000 0.40000 0.50000 0.60000 0.70000 0.80000 0.90000 1.00000
Yteoretic=
1.00000 1.09545 1.18322 1.26491 1.34164 1.41421 1.48324 1.54919 1.61245 1.67332 1.73205
YEuler =
1.00000 1.10000 1.19182 1.27744 1.35821 1.43513 1.50897 1.58034 1.64978 1.71778 1.78477
YRK4=
1.0 1.09545 1.18322 1.26491 1.34164 1.41422 1.48324 1.54920 1.61246 1.67332 1.73206
Ylsode =
1.0 1.09545 1.18322 1.26491 1.34164 1.41421 1.48324 1.54919 1.61245 1.67332 1.73205

Erori relative ale solutiei la capatul intervalului de integrare ( in x=1) :


erEuler=(Yteoretic(1)-Yeuler(1))/ Yteoretic(1)*100%= -3.0438 %
erRK4=(Yteoretic(1)-YRK4(1))/ Yteoretic(1)*100%= -3.2087e-04 %
erLSODE=(Ylsode(1)-Ylsode(1))/ Yteoretic(1)*100%= 2.3101e-06 %
Functii Octave pentru rezolvarea ecuatiilor diferentiale cu conditii initiale

octave#1> [x,istate,msg]= lsode ("f", x0, t,{t_cr});


Rezolva o ecuatie/sistem de ecuatii, diferentiale ordinare cu conditii initiale. Intrari :
f - este numele functiei care descrie ecuatia/sistemul
x0 – este vectorul conditiilor initiale
t – este intervalul in care se rezolva ecuatia
t_cr – este optional
Iesiri : x – vectorul solutie ; istate – scalar de validare a integrarii ; msg – mesaj text
octave#1> [x,istate,msg]= lsode (["f" "j"], x0, t,{t_cr});
Rezolva o ecuatie/sistem de ecuatii, diferentiale ordinare cu conditii initiale, folosind
Jacobianul functiei f. In acest caz functia lsode trebuie sa fie acompaniata de functia
lsode_options (opt, val) (help lsode_options (opt, val) )

Alte functii pentru rezolvarea ecuatiilor/sistemelor diferentiale ordinare cu conditii initiale (Problema Cauchy)
octave#1> [tout,xout]=ode23(FUN,tspan,x0,{alte_argumente_optionale})
octave#1> [tout,xout]=ode45(FUN,tspan,x0,{alte_argumente_optionale})
octave#1> [tout,xout]=ode78(FUN,tspan,x0,{alte_argumente_optionale})
Rezolva o ecuatie/sistem de ecuatii, diferentiale ordinare cu conditii initiale
Intrari: FUN - este un string care contine numele functiei care descrie ecuatia diferentiala tspan- este
intervalul de integrare
x0- vectorul conditiilor initiale
{alte_argumente_optionale} – pair, ode_fcn_format,tol,trace,count,hmax ... (»help ode..)
Iesiri : xout – vectorul solutie ; tout – vectorul variabilei independente

APLICAŢII

⇒ Să se integreze numeric ecuaţiile diferenţiale ordinare, cu condiţie iniţială, de mai jos, plecând de la x0
până la valoarea finală xn, utilizând metodele Runge-Kutta. Comparaţi rezultatele obţinute cu RK1,..., RK4.
In fiecare caz in parte sa se determine solutia utilizand functiile Octave: lsode, ode23, ode45, ode78

, cu y (− 2 ) = 4
x
Problema 1. y′ = şi xn = 0
y

Problema 2. y ′ = y , cu y(0) = 1 şi x n = 2

y2
Problema 3. y′ = , cu y(0) = 1 şi x n = 1
ex
⇒ Să se integreze numeric ecuaţiile diferenţiale ordinare, cu condiţie iniţială, de mai jos, plecând de la
valoarea iniţială, până la valoarea finală, utilizând metoda Runge-Kutta de ordinul 4.
Sa se determine de asemenea solutia utilizand functiile Octave: lsode si ode23
y − 2x
Problema 4. y′ = , cu y (0) = 1 şi x n = 1
y

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