Sunteți pe pagina 1din 10

Departamentul A.I.A.

Matematici Asistate de Calculator

Lucrarea de laborator 8 Integrare numeric. Derivare numeric


Cuprinsul lucrrii Consideraii pregtitoare: Integrarea numeric a funciilor Derivarea numeric a funciilor Aplicaii n Matlab

1. Consideraii pregtitoare a. Integrarea numeric Se consider o funcie real de variabil real f:[a,b]R, integrabil pe intrervalul [a,b]. Se cere s se calculeze integrala definit:

f ( x)dx .
a

O modalitate de a calcula numeric integrala funciei f este prin aproximarea lui f printr-o alt funcie g, a crei integral poate fi uor calculat. De exemplu, funcia g poate fi o funcie liniar pe poriuni (metod cunoscut sub denumirea de "metoda trapezelor") sau o funcie parabolic pe poriuni (metoda este cunoscut ca "metoda lui Simpson"). n cazul metodei trapezelor, intervalul pe care se calculeaz integrala, [a,b], este imprit n n seciuni egale, adic pasul i abscisa curent sunt: h=

ba >0, n

xk=a+kh, k=1,2,,n.

Pe fiercare subinterval [xk,xk+1] funcia se aproximeaz cu o funcie liniar. Integrala poate fi estimat prin expresia: If = y a + y b + 2
h 2

yk , k =1
n1

unde yk=f(xk)

n cazul metodei lui Simpson, intervalul [a,b] este divizat n 2n seciuni egale: h=

ba =xk+1-xk>0, xk=a+kh, k=1,2,,2n, 2n

Pe fiercare subinterval [xk,xk+1] funcia se aproximeaz cu o funcie parabolic. Integrala poate fi estimat prin urmtoarea expresie, cunoscut sub denumirea de "formula generalizat a lui Simpson":

h If = [ya+yb+4(y1+y3++y2n-1)+2(y2+y4++y2n-2)] 3
1

Departamentul A.I.A.

Matematici Asistate de Calculator

Dintre cele dou metode prezentate, metoda lui Simpson are pentru acelai numr de noduri o precizie mai bun dect metoda trapezelor. Menionm i dou cazuri speciale de calcul al integralelor: calculul numeric al integralelor pe intervale infinite f ( x )dx se poate face cu una
a

din urmtoarele metode: a. schimbarea variabilei pentru a transforma intervalul infinit [a,) ntr-un interval finit; b. decompunerea integralei n suma a dou integrale:
a b a b a 2b b b

f ( x )dx = f ( x )dx + f ( x )dx ,

unde a doua integral fie se neglijeaz, daca b este suficient de mare i

f ( x )dx >> f ( x )dx , fie se aproximeaz forma asimptotic a lui f printr-o

funcie g, g(x)f(x), care pentru x suficient de mare permite calculul analitic al integralei funciei g. calculul numeric al integralelor funciilor cu singulariti (singularitile sunt puncte ale unui interval marginit n care funcia este infinit) se poate face prin una din metodele: a. se elimin aceste puncte (dac este posibil) prin schimbare de variabil, integrare prin pri .a.; b. se folosete metoda lui Simpson de calcul a integralelor cu excluderea singularitilor prin nlocuirea acestora cu valori aproximative; c. se utilizeaz metode de calcul a integralei bazate pe aproximarea funciilor cu polinoame. b. Derivarea numeric Problema derivrii numerice se pune astfel: Fiind dat o funcie real de variabil real f:[a,b]R, se cere s se aproximeze numeric derivatele de ordinul I i cele de ordin superior pentru diverse valori ale domeniului de definiie. Aceast problem se pune n una dintre situaiile: a) expresia analitic a funciei f nu este cunoscut, f fiind definit printr-un set de puncte; b) expresia analitic a funciei este cunoscut, dar are o form complicat, utlizarea acesteia n calcule fiind incomod sau imposibil. Exist mai multe categorii de metode de derivare numeric, cum sunt, de exemplu: metode bazate pe dezvoltarea n serie Taylor a funciei f, metode bazate pe aproximarea funciei f printr-un polinom de interpolare, derivatele fiind apoi aproximate prin derivatele polinomului. Din prima categorie fac parte metodele de aproximare a derivatelor funciilor bazate pe diferene finite, metode care vor fi prezentate n continuare.
2

Departamentul A.I.A.

Matematici Asistate de Calculator

Fie {xk}k=1,2,,n un ir de puncte din intervalul [a,b]. Aproximarea derivatei de ordinul I a funciei f n punctul xk se poate face cu una din formulele:
f (x k ) f(x k ) f(x k 1 ) x k x k 1 f(x k +1 ) f(x k ) x k +1 x k f(x k +1 ) f(x k 1 ) x k +1 x k 1

(k{2,3,,n}) (k{1,3,,n-1}) (k{2,3,,n-1})

diferene regresive

f (x k )

diferene progresive

f (x k )

diferene centrate

Derivarea numeric are dezavantajul c tinde s creasc micile erori n aproximarea funciei. Prin urmare, se recomand utilzarea ei cu precauie, i numai n situaiile n care nu exist o alt modalitate de calcul a derivatei. 2. Aplicaii n Matlab a) Integrare numeric Pentru calculul integralelor prin metoda trapezelor, se utilizeaz funcia Matlab trapz. Aceast funcie presupune c funcia f este dat prin valori numerice n puncte echidistante ale intervalului de integrare (yk=f(xk) , k=1,2,,n)). Functia Matlab quad realizeaz calculul integralei unei funcii prin metoda adaptiv-recursiv Simpson. Funcia quad presupune c funcia de integrat f este cunoscut prin expresia sa analitic (y=f(x)). Exemplul 1: S se calculeze integrala funciei f(x)=ln(x+1)sin(x) pe intervalul [0,]. Soluie: Funcia fiind cunoscut prin expresia analitic, este perferabil utilizarea funciei Matlab quad pentru calculul integralei. Se creaz un fiier funcie f1.m care conine forma analitic a funciei f: function y=f1(x) y=log(x+1).*sin(x); Apoi se apeleaz funcia Matlab quad pentru calculul integralei cerute: >> I1q=quad('f1',0,pi) I1q = 1.81131416087345 Dac dorim s modificm precizia de calcul a integralei, vom introduce un al 4-lea argument de apel n funcia quad, care va specifica noua precizie: >> I1q_modif=quad('f1',0,pi,10^(-10)) I1q_modif = 1.811314110921825 Observaie. Pentru a calcula integrala funciei folosind metoda trapezelor, trebuie mai nti reprezentat funcia sub forma unui set de puncte (xk,f(xk)), utiliznd doi vectori. Apoi se apeleaz funcia Matlab trapz. Se execut urmtoarea secven de instruciuni (fiier script):
3

Departamentul A.I.A.

Matematici Asistate de Calculator

x=0:pi/100:pi; y=f1(x); I1t=trapz(x,y) Se obine: I1t = 1.81119722552511 Exemplul 2: S se calculeze integrala funciei definit prin relaiile: f(xi) = sin(xi) / (i2 + 1) *cos(i / xi), xi = + i * / 30, i = 1,2,...,150. Soluie: De aceast dat, funcia este cunoscut printr-un set de puncte. Se va utiliza metoda trapezelor pentru calculul integralei: Se execut urmtoarea secven Matlab (fiier script): i=1:150; x=pi+i*pi/30; f2=sin(x)./(i.^2+1).*cos(i./x); I2t=trapz(x,f2) Se obine pentru integral valoarea: I2t = -0.0025 Exemplul 3: S se calculeze integrala funciei f(x) = 1 / sin(x), pe intervalul [-/2, /2]. Soluie: Se observ c funcia are un punct de singularitate, i anume x=0. Definim funcia: function y=f3(x) y=1./sin(x); Apoi se apeleaz funcia Matlab quad pentru calculul integralei cerute, evitnd punctul de singularitate:
I3q=quad('f3',-pi/2,-eps,10^(-10))+quad('f3',eps,pi/2,10^(-10))

Se obine valoarea: I3q = 0 b) Derivare numeric Calculul derivatei unei funcii n Matlab se realizeaz cu ajutorul funciei auxiliare diff. Funcia diff evalueaz diferena elementelor succesive ale unui vector sau ale coloanei unei matrici. Sintaxa funciei diff prezint mai multe forme, dintre care menionm urmtoarele: diff(X) diff(X,n) unde X poate fi un vector sau o matrice.

Departamentul A.I.A.

Matematici Asistate de Calculator

Pentru un vector X=[X(1) X(2) X(3) X(k-1) X(k)], funcia diff returneaz vectorul: diff(X) = [X(2)-X(1) X(3)-X(2) X(k)-X(k-1)]. Acelai vector returneaz i apelul diff(X,1). Apelul diff(X,n) este echivalent cu apelul diff(diff(X,n-1)). Paii necesari pentru calculul derivatei funciei f sunt urmtorii: se genereaz vectorii x i f, care conin respectiv, punctele {xk}k i valorile funciei f n aceste puncte; se aproximeaz derivata funciei (prin diferene finite regresive sau progresive) utiliznd urmtoarea formul:

df=diff(f)./diff(x) Reamintim c derivata unei funcii polinomiale se calculeaz cu funcia Matlab polyder. Exemplul 4: S se reprezinte grafic derivata de ordinul I a funciei f(x)=ln(x+1)sin(x) pe intervalul [0,] . Soluie: Se introduce n Matlab urmtoarea secven de instruciuni: % definirea intervalului x=0:pi/60:pi; % definirea functiei f=log(x+1).*sin(x); % calculul derivatei folosind cele trei tipuri de diferente dx=diff(x); df=diff(f); % derivata numerica cu diferente regresive / progresive dfx=df./dx; % derivata numerica cu diferente centrate k=length(dx); dfxc=(df(1:k-1)+df(2:k))./(dx(1:k-1)+dx(2:k)); % reprezentarile grafice ale derivatelor n=length(x); % derivata numerica cu diferente regresive xr=x(2:n); plot(xr,dfx,'ro') hold on pause % derivata numerica cu diferente progresive xp=x(1:n-1); plot(xp,dfx,'b+') pause % derivata numerica cu diferente centrate xc=x(2:n-1); plot(xc,dfxc,'g*') pause % derivata analitica - pentru comparare derf=sin(x)./(x+1)+log(x+1).*cos(x); plot(x,derf,'k')
5

Departamentul A.I.A.

Matematici Asistate de Calculator

pause hold off close Se obine graficul din figura de mai jos:
1

0.5

-0.5

-1

-1.5

0.5

1.5

2.5

3.5

Fig.1. Derivata de ordinul I a funciei de la exemplul 4 calculat n 4 moduri Exemplul 5: S se calculeze derivata de ordinul I a funciei definit prin tabelul de valori de mai jos : Tabelul 1 x f(x) -2 100 -1 90 0 86 1 62 2 74 3 81

n punctele: -1, -0.5, 0.5, 1, 1.45. Soluie: Se execut urmtoarea secven de instruciuni Matlab (fiier script): % definirea vectorilor x=-2:3; f=[100 90 86 62 74 81]; p=[-1 -0.5 0.5 1 1.45]; % derivata - se obtine sub forma de set de valori dx=diff(x); df=diff(f); % derivata cu diferente regresive / progresive dfx=df./dx; % derivata cu diferente centrate k=length(dx); dfxc=(df(1:k-1)+df(2:k))./(dx(1:k-1)+dx(2:k)); % pentru aflarea valorilor derivatei in punctele cerute, % derivata va fi aproximata, de exemplu cu functii liniare pe % portiuni n=length(x); disp('derivata numerica cu diferente regresive') xr=x(2:n); dpr=interp1(xr,dfx,p,'linear')
6

Departamentul A.I.A.

Matematici Asistate de Calculator

disp('derivata numerica cu diferente progresive') xp=x(1:n-1); dpp=interp1(xp,dfx,p,'linear') disp('derivata numerica cu diferente centrate') xc=x(2:n-1); dpc=interp1(xc,dfxc,p,'linear') pause % Observatie % -1 si 1 sunt puncte din tabel, deci valorile lor se pot afla % direct cu formulele pentru diferente finite (-1=x(2) si % 1=x(4)) dfr2=(f(2)-f(1))/(x(2)-x(1)) % diferentre regresive, -1 dfp2=(f(3)-f(2))/(x(3)-x(2)) % diferentre progresive, -1 dfr2=(f(3)-f(1))/(x(3)-x(1)) % diferentre centrate, -1 dfr4=(f(4)-f(3))/(x(4)-x(3)) dfp4=(f(5)-f(4))/(x(5)-x(4)) dfr4=(f(5)-f(3))/(x(5)-x(3)) % diferentre regresive, 1 % diferentre progresive, 1 % diferentre centrate, 1

Se obin rezultatele: derivata numerica cu diferente regresive dpr = -10.0000 -7.0000 -14.0000 -24.0000 derivata numerica cu diferente progresive dpp = -4.0000 -14.0000 -6.0000 12.0000 derivata numerica cu diferente centrate dpc = -7.0000 -10.5000 -10.0000 -6.0000 dfr2 = -10 dfp2 = -4 dfr2 = -7 dfr4 = -24 dfp4 = 12 dfr4 = -6

-7.8000

9.7500

0.9750

Exemplul 6: S se reprezinte grafic derivata de ordinul I a funciei definit prin relaiile: f(xi) = sin(xi) / (i2 + 1) *cos(i / xi), xi = + i * / 30, i = 1,2,...,150. Soluie: Se execut urmtoarea secvena Matlab (fiier script): i=1:150; x=pi+i*pi/30; f=sin(x)./(i.^2+1).*cos(i./x);

Departamentul A.I.A.

Matematici Asistate de Calculator

% calculul derivatei folosind cele trei tipuri de diferente dx=diff(x); df=diff(f); % derivata numerica cu diferente regresive / progresive dfx=df./dx; % derivata numerica cu diferente centrate k=length(dx); dfxc=(df(1:k-1)+df(2:k))./(dx(1:k-1)+dx(2:k)); % reprezentarile grafice ale derivatelor n=length(x); % derivata numerica cu diferente regresive xr=x(2:n); plot(xr,dfx,'mo') hold on pause % derivata numerica cu diferente progresive xp=x(1:n-1); plot(xp,dfx,'b+') pause % derivata numerica cu diferente centrate xc=x(2:n-1); plot(xc,dfxc,'k') pause hold off close n urma execuiei secvenei de mai sus se obine graficul din figura 2:
0.16 0.14 0.12 0.1 0.08 0.06 0.04 0.02 0 -0.02

10

12

14

16

18

20

Fig. 2. Derivata de ordinul I a funciei de la exemplul 6 calculat n 3 moduri Exemplul 7: S se calculeze i s se reprezinte grafic derivatele de ordinul I, II i III ale funciei: f : [-10,10] R, f(x)=(x2+1)(x2-1)(x+2)(7x-6)(-3x+2). Soluie: Se observ c este vorba depre o funcie polinomial. Determinm mai nti coeficienii funciei, apoi apelm funcia Matlab polyder de 3 ori: f1=conv([1 0 1],[1 0 -1]); f2=conv([1 2],conv([7 -6],[-3 2]));

Departamentul A.I.A.

Matematici Asistate de Calculator

disp('coeficientii functiei polinomiale') f=conv(f1,f2) pause % derivatele disp('coeficientii derivatei de ordinul I') df_1=polyder(f) disp('coeficientii derivatei de ordinul II') df_2=polyder(df_1) disp('coeficientii derivatei de ordinul III') df_3=polyder(df_2) pause % grafice x=-10:0.1:10;
plot(x,polyval(df_1,x),'b*',x,polyval(df_2,x),'ro',x,polyval(df_3,x),'g+')

Se obine: coeficientii functiei polinomiale f = -21 -10 52 -24 21 coeficientii derivatei de ordinul df_1 = -147 -60 260 -96 63 coeficientii derivatei de ordinul df_2 = -882 -300 1040 -288 126 coeficientii derivatei de ordinul df_3 = -4410 -1200 3120 -576 126
1 x 10
8

10 I 20 II 20 III

-52

24

-52

0.5

-0.5

-1

-1.5

-2 -10

-8

-6

-4

-2

10

Fig.3. Reprezentarea grafic a derivatelor de ordinul I, II, i III

Departamentul A.I.A.

Matematici Asistate de Calculator

Probleme propuse 8.1. S se calculeze integralele urmtoarelor funcii pe intervalele menionate : a) f(x)=1/(sin(x)+cos(x)) , x[/3,/2]; b) f(x)=1/(1-x), x [0,1]; c) f(xj)=j x 2 j /(xj-1)-2/(j+1), x[-1,0], xj=-1.1+0.1j, j=1,2,... 8.2. S se calculeze derivata funciei: f(x)=x4+13x3-7x2+x-1 n punctele -3, -1.25, 0, 5. S se reprezinte grafic funcia i derivata acesteia pe intervalul [-2, 3]. 8.3. S se calculeze derivatele de ordinul I ale funciilor de la exerciiul 8.1., n punctele: a) 1.05, 1.1, 1.25, 1.4; b) 0, 0.5, 1; c) 0.9, -0.85, -0.3, 0. 8.4. S se reprezinte grafic derivatele funciilor de exerciiul 8.1.

10

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