Sunteți pe pagina 1din 9

Universitatea Tehnica de Constructii Bucuresti Facultatea de Inginerie a Instalatiilor

Proiect Seminar

Studenti:

CUCU BOGDAN MOCANU ROBERT VASILE NICOLAE GABRIEL Master Anul I, TPPMU

Metoda predictor-corector cu pai legai a lui Adams pentru rezolvarea unei ecuaii difereniale ordinare

O ecuaie diferenial ordinar de ordinul nti este o ecuaie n care necunoscuta este o funcie y(x) ce depinde de o singur variabil i care satisface o relaie de tipul

O ecuaie diferenial are n general o infinitate de soluii i pentru selectarea uneia singure se impun condiii suplimentare. Cea mai utilizat condiie n acest sens este condiia Cauchy. Problema Cauchy pentru ecuaii difereniale const n determinarea unei funcii y(x)

astfel ca

Se mparte intervalul [x0, x0+L] pe care se caut soluia n subintervale egale de lungime h: x0<x1<x2<<xn= x0+L. Iniial se cunoate y0=y(x0). Trebuie determinat yi , pentru i>0, n funcie de valorile (xk,yk), k<i. n fiecare metod de determinare a lui yi se caut ca eroarea care se face s fie ct mai mic. Adic, dac y(xk)=yk pentru k<i, atunci, formula care determin pe yi s fie astfel ca |y(xi)-yi|=O(hs) cu s ct mai mare, ceea ce inseamn c diferena |y(xi)-yi| este mic pentru h mic. Valorile soluiei n punctele xi se aproximeaz prin numerele yi care se determin cu formulele de mai jos.

Metode uni-pas sunt metodele n care pentru calculul lui yi se folosesc doar valorile pentru x i y la pasul i-1. Avem

n funcie de cum se aproximeaz integrala se obtin diverse metode pentru estimarea lui y(x+h).

1. Metoda Euler:

2. Metoda predictor-corector

Formula conine pe yi implicit, dar pentru h mic, membrul II din este o contracie ca funcie de yi, deci se poate determina yi din prin aproximaii succesive:

Prin repetarea ultimelor doua ecuaii pn ajunge la yi cu precizia dorit. 3. Metoda Euler perfecionat:

devine suficient de mic se

4. Metode de tip Runge-Kutta Aceste metode constau n a determina o aproximare pentru y(x+h) astfel: a) Se determin k1, k2,..kq prin:

b) Se determin z(h) ca aproximare pentru y(x+h) prin:

Coeficienii , , p se determin din condiia ca r(h)=y(x+h)-z(h)=O(h s) pentru un s ct mai mare.

Pentru q=4, s=5 se gseste de exemplu

ceea ce conduce la formulele:

cunoscute ca formulele Runge-Kutta de ordinul 4.

Metode multi-pas n aceste metode se folosesc mai multe valori (xk,yk) cu k<i pentru a determina pe yi. O cale de a obine asemenea formule este de a considera integrala:

Cunoscnd valorile lui y n punctele x-mh, x-(m-1)h,..x, cunoatem funcia f(t, y(t)) n aceste puncte i prin interpolare gsim f(t,y(t))=Qm(t)+Rm(t), unde Qm(t) este polinomul Lagrange sau Newton de interpolare iar Rm(t) este restul. Pentru p=0 gsim

n mod concret, pentru m=3 gsim:

ceea ce conduce la formula de calcul aproximativ:

Formulele de tip (2) se numesc formule de tip Adams. Se vede c este nevoie de cunoaterea mai multor valori la nceput pentru ca metoda s mearg.

Alte metode multipas dau pe yi+1 ca soluie a unei ecuaii algebrice care conine i valorile y la civa pai anteriori (metode Adams-Moulton):

Dezavantajul acestei metode l constituie faptul c nu se autopornete, adic nu poate determina valorile iniiale pentru pornire. Una din posibilitile de a nltura aceast dificultate este calculul valorilor iniiale de pornire cu ajutorul unei metode cu pai separai, de exemplu metoda Runge-Kutta de ordinul patru. Deoarece este nevoie de a calcula y1 i y2 prin Runge-Kutta va trebui s introducem i aceast procedur n program. Procedura de rezolvare pentru metoda Adams-Moulton de ordinul 4 (3) este urmtoarea:

Solutie

Exemplu: Fie

Se cere valoarea lui y pentru x=1.25.

function u=f(x, y) u=x*y^2 endfunction x0=0;y0=1;xsol=1.25; L=xsol-x0; n=30;h=L/n; //punctele in care vom calcula solutia for i=1:n+1 x(i)=x0+(i-1)*h; end function u=rk4(f, x, y, h) k1=h*f(x,y); k2=h*f(x+h/2,y+k1/2); k3=h*f(x+h/2,y+k2/2); k4=h*f(x+h,y+k3); u=y+(k1+2*k2+2*k3+k4)/6; endfunction function s=AM4(x0, y0, n, h) s=y0; F(1)=f(x0,y0); y2=rk4(f,x0,y0,h); x2=x0+h; s=[s,y2]; F(2)=f(x2,y2); y3=rk4(f,x2,y2,h); x3=x2+h; s=[s,y3]; F(3)=f(x3,y3); for i=3:n yp=s(i)+h*f(x(i),s(i)); yc=s(i)+h/24*(9*f(x(i+1),yp)+19*F(i)-5*F(i-1)+F(i-2));

while abs(yp-yc)/(1+abs(yc))>10^(-6) yp=yc; yc=s(i)+h/24*(9*f(x(i+1),yp)+19*F(i)-5*F(i-1)+F(i-2)); end s=[s,yc]; F(i+1)=f(x(i+1),s(i+1)) end s=[x';s]; endfunction sol=(AM4(x0,y0,n,h))'; //rezolvare cu functia ode din scilab y=(ode(y0,x0,x,f))'; rez=[sol y] plot(x,rez(:,2),'y') plot(x,rez(:,3),'b') xgrid

Rezolvare prin Adams-Moulton 0. 0.0416667 0.0833333 0.125 0.1666667 0.2083333 0.25 0.2916667 0.3333333 0.375 0.4166667 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1. 1.0416667 1.0833333 1.125 1.1666667 1.2083333 1.25 1. 1.0008688 1.0034843 1.007874 1.0140846 1.0221829 1.0322582 1.0444246 1.0588239 1.0756308 1.0950578 1.1173629 1.1428586 1.1719247 1.2050236 1.2427221 1.2857192 1.3348852 1.391314 1.456398 1.5319346 1.6202821 1.7245946 1.8491849 2.0001091 2.1861416 2.4204934 2.7240218 3.1317168 3.7071815 4.5797842

Rezolvare cu functia ode din Scilab 1. 1.0008689 1.0034847 1.0078744 1.014085 1.0221833 1.0322586 1.0444248 1.0588241 1.0756309 1.0950577 1.1173625 1.1428579 1.1719236 1.2050219 1.2427197 1.2857156 1.3348799 1.3913062 1.4563864 1.5319174 1.6202562 1.7245545 1.8491216 2.0000053 2.185965 2.4201767 2.7234157 3.1304509 3.7042036 4.5714662