Documente Academic
Documente Profesional
Documente Cultură
Una din problemele fundamentale, din multe domenii ştiinţifice şi inginereşti, este
problema modelării şi simulării. Scilab-ul furnizează o serie de mijloace pentru
dezvoltarea şi simularea diferitelor tipuri de modele. Unul dintre cele mai
cunoscute modele este cel guvernat de ecuaţiile diferenţiale ordinare.
Se numesc astfel metodele în care pentru calculul lui yi se folosesc doar valorile
pentru x şi y la pasul i-1.
Avem
adică
y xi 1 h y xi 1 f xi 1 , y xi 1 h O h 2 .
Putem calcula aproximativ atunci pe yi astfel:
yi yi 1 h f ( xi 1 , yi 1 ), i 1, n (3)
În acest caz s=2, iar metoda se numeşte metoda lui Euler.
y ( x h) y x
h
2
y ' x y ' x h O h3
(4)
y x f x, y x f x h, y x h O h3
h
2
Prin urmare această metodă ne conduce la:
yi yi 1
h
f xi 1 , yi 1 f xi , yi (5)
2
Formula (5) conţine pe yi implicit, dar pentru h mic, membrul II din (5) este o
contracţie ca funcţie de yi, deci se poate determina yi din (5) prin aproximaţii
succesive:
yip yi 1 hf xi 1 , yi 1 predictor
c
yi yi 1 f xi 1 , yi 1 f xi , yi corector
h
2
p
(6)
yip yic noul predictor
Prin repetarea ultimelor doua ecuaţii din (5) până | yip yic | devine suficient de mic
se ajunge la yi din (5) cu precizia dorită. Metoda se numeşte predictor-corector şi
aproximează soluţia ecuaţiei diferenţiale mai bine ca metoda Euler: s=3.
yx h yx
h
2
f x, y x f x h, y* O h3 (7)
Acest lucru poate fi realizat dacă luăm y*=y(x)+hf(x,y(x)), (conform cu (2)), caz în
care (7) devine:
yx h yx
h
2
f x, yx f x h, ( yx hf x, yx O h3 (8)
k1 hf ( xi 1 , yi 1 )
k 2 hf xi 1 h , yi 1 k1
2 2
h k2
k3 hf xi 1 , yi 1 (13)
2 2
k 4 hf xi 1 h, yi 1 k3
y y 1 k 2k 2k k , i 1, n
i 1
i 6
1 2 3 4
y ( x) x * y
EXEMPLU: Fie Se cere valoarea lui y pentru x=1.
y ( 0) 1
Soluţie în Scilab:
function f=f(x,y)
f=x*y;
endfunction
function y=Euler(n,x,xx,y)
h=(xx-x)/n;
for i=1:n do
y=y+h*f(x,y);
x=x+h;
end
endfunction
Euler(10,0,1,1)
function y1=EulerPerfectionata(n,x,xx,y1)
h=(xx-x)/n;
for i=1:n do
y1=y1+h/2*(f(x,y1)+f(x+h,y1+h*f(x,y1)));
x=x+h;
end
endfunction
EulerPerfectionata(10,0,1,1)
function y2=RungeKutta(n,x,xx,y2)
h=(xx-x)/n;
for i=1:n do
k1=h*f(x,y2);
k2=h*f(x+h/2,y2+k1/2);
k3=h*f(x+h/2,y2+k2/2);
k4=h*f(x+h,y2+k3);
y2=y2+1/6*(k1+2*k2+2*k3+k4);
x=x+h;
end
endfunction
RungeKutta(10,0,1,1)
ans = 1.5471104
ans = 1.6478813
ans = 1.648721
ans = 1.6487224
Observaţie: În Scilab există funcţii de rezolvare a ecuaţiilor diferenţiale: De
exemplu ode – rezolvarea de ecuaţii diferenţiale ordinare
y=ode(y0,t0,t,f)
[y,w,iw]=ode([type],y0,t0,t [,rtol [,atol]],f [,jac] [,w,iw])
[y,rd,w,iw]=ode("root",y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw])
y=ode("discrete",y0,k0,kvect,f)
Parametri:
y0: vector real sau matrice (condiţiile iniţiale).
t0: scalar rea (timpul iniţial).
t: vector real (timpuri la care soluţia e calculată).
f: extern (funcţie sau şir de caractere sau listă).
type: unul din şirurile de caractere: "adams" "stiff" "rk" "rkf" "fix" "discrete"
“roots"
rtol,atol: constante reale sau vectori reali de aceeaşi dimensiune ca şi y.
jac: extern (funcţie sau şir de caractere sau listă).
w, iw: vectori reali.
ng: întreg.
g: extern (funcţie sau şir de caractere sau listă).
k0: intreg (timp iniţial).
kvect : vector de întregi.
Solutie cu ode:
function f=f(x,y)
f=x*y;
endfunction
y0=1;x0=0;x=0:0.01:1
y=ode(y0,x0,x,f)
plot(x,y)
ans = 1.6487224
Exerciţii:
y( x) y y y( x) y 2 x
pentru x 1.5 ; pentru x 1.25 ;
y (1) 1 y ( 0 ) 1
y y
2
y ( x)
x x pentru x 4
y (1) 1
a) să se programeze rezolvarea unei ecuaţii prin metoda Euler, cu reprezentarea
grafică a soluţiei.
b) să se programeze rezolvarea unei ecuaţii diferentiale prin metoda Euler
perfectionată. Reprezentaţi grafic soluţia.
c) să se programeze rezolvarea unei ecuaţii prin metoda Euler predictor-corector .
d) să se programeze rezolvarea unei ecuaţii prin metoda Runge Kutta de ordinul 4.
Să se reprezinte grafic soluţia.