Matematica
Aproximarea functiilor prin serii Taylor - aproximarea prin fractii continueAproximarea FunctiilorIn aceasta tema: prezentarea pe scurt a notiunilor generale despre aproximarea functiilor prin metode numerice; realizarea programelor pentru aproximarea functiilor uzuale (exp, ln, sin, cos) prin serii de puteri; fractii continue. Aproximarea functiilor prin serii Taylor1.1. Prezentarea teoreticaO functie reala f(x) se numeste analitica intr-un punct z, daca in orice vecinatate a acestui punct, functia poate fi dezvoltata intr-o serie de puteri (serie Taylor).
(1) Pentru z=0 se obtine seria MacLaurin: (2) Diferenta: (3) este denumita rest si reprezinta eroarea rezultata ca urmare a inlocuirii functiei f(x) cu polinomul Taylor (eroare de trunchiere) si are expresia: (4) Pentru functia exponentiala ex se obtine dezvoltarea in serie MacLaurin: (5) Pentru valori foarte mari ale lui x in valoare absoluta este nerecomandabil sa calculam seria dupa formula (5). De aceea, consideram ca x=p+q, unde p este partea intreaga a lui x iar q este partea fractionala a lui x (0 q<1). Astfel, vom avea (6) Calculul lui ep este simplu de realizat deoarece trebuie sa inmultim pe e=2,718281828459, sau pe 1/e=0,367879441171 cu el insusi de p ori. Calculul lui eq se va face dupa formula prezentata mai sus si anume: (7) Calculul logaritmului natural al unui numar se va face folosind urmatoarea dezvoltare: (8) Aceasta formula este dificil de utilizat pentru calcule, deoarece domeniul 0<x+1 este mic si in plus pentru |x| apropiat de unu seria converge foarte lent (vezi referinta [1]). De aceea, se foloseste formula ce se obtine din scaderea dezvoltarii ln(1+x) din ln(1-x), rezultand: (9) Notand: (10) rezulta: (11) Functiile trigonometrice sinus si cosinus au dezvoltarea in serie data de formulele: (12) (13) Problema importanta la aproximarea functiilor prin serii de puteri este aceea de determinare a numarului de termeni din serie. In practica adunarile se finalizeaza atunci cand termenul ce deja a fost adaugat este mai mic in valoare absoluta decat o toleranta admisa. 1.2. Aplicatii rezolvateAplicatia 1 Sa se realizeze programul in limbajul Pascal care evalueaza functia ex. Pentru test se vor lua pentru x valorile 1.0; -1.0; 0.5; -0.5; 5.0. Rezolvare Dezvoltarea in serie MacLaurin pentru functia ex este data de expresia (5). Deoarece valoarea functiei exponentiale trebuie sa fie destul de exacta si pentru valori foarte mari ale argumentului functiei, vom folosi expresiile (6) si (7). Programul pentru calculul functiei exponentiale se numeste exponential si este prezentat in lista 1 Lista 1. Programul pentru aproximarea functiei exponentiale Program exponential; Uses CRT; Const e=2.718281828459; upe=0.367879441171; Var i,maxit,k,p:Integer; x,t,s,eps,se,q:Real; Begin ClrScr; maxit:=50; Write('X='); Readln(x); Write('epsilon='); Readln(eps); p:=Integer(trunc(abs(x))); q=abs(x)-p; se:=1; if x<=0 then t:=upe else t=e; for i:=1 to p do se:=se*t; s:=0;t;=1;k:=0; Lista 1. Programul pentru aproximarea functiei exponentiale (continuare) repeat k:=k+1;
s:=s+t; t:=t*q/k; until (t<=eps) or (k>maxit); if k>maxit then writeln('Eroare! Proces neconvergent') else begin se:=s*se; writeln('exp=',se:8:5); end; Repeat Until Keypressed End. 1.3. Aplicatii propuseAplicatia P1. Sa se realizeze programul in limbajul Pascal care evalueaza functia sin(x). Valorile pentru test vor fi x=0; p p p p Aplicatia P2. Sa se realizeze programul in limbajul Pascal care aproximeaza folosind serii de puteri functia f(x)=cos(x). Valorile de test vor fi x=0; p p p p 2. Aproximarea functiilor prin metoda iterativa2.1. Prezentare teoreticaO alta metoda de aproximare a valorilor unei functii este metoda iteratiilor. Pentru aceasta presupunem ca avem de calculat valoarea: y=f(x) Aceasta relatie putem sa o scriem ([1]) in forma implicita: F(x,y)=0 unde F(x,y) este o functie continua care are derivata partiala F'y(x,y) continua si diferita de zero. Daca avem yn o valoare aproximativa a lui y, folosind teorema lui Lagrange si aproximand valoarea intermediara dintre yn si y chiar cu yn obtinem: (16) Prima problema este de a gasi o valoare y0 convenabil aleasa si cat mai aproape de valoarea dorita a lui y, pe care sa o folosim drept valoare initiala a procesului iterativ. Procesul iterativ continua pana cand diferenta in valoare absoluta dintre doua valori succesive yn+1 si yn este mai mica decat o eroare admisibila. De exemplu, ne propunem ca prin acest procedeu sa calculam (17) Pentru aceasta, scriem functia implicita, astfel incat avem: F(x,y)=y2-x=0 (18) si F'y(x,y)=2y (19) Prin urmare formula de recurenta obtinuta pentru functia radical este: (20) care se numeste formula lui Heron. Pentru acest proces scriind numarul x ca fiind x=2m x1 cu m un intreg si 0.5 x1<1. Aproximatia initiala y0 a lui y va fi: (21) unde [m/2] reprezinta partea intreaga a numarului m/2. 2.2. Aplicatii propuseAplicatia 2. Sa se realizeze programul in limbajul Pascal care utilizand metoda Hero aproximeaza functia radical. Rezolvare Se porneste de la relatia lui Heron pentru functia radical care este data de expresia (20) cu valoarea initiala data de expresia (21). Schema logica si pseudocodul pentru aceasta problema sunt date in figura 1. si 2
Figura 1 Pseudocodul pentru calculul functiei radical
Figura 2 Schema logica pentru calculul functiei radical Programul pentru aproximarea functiei radical se numeste radical si este prezentat in lista 2 Lista 2. Programul pentru aproximarea functiei radical Program radical; Uses CRT; Var k,m,i:Integer; x,y,y1,eps:Real; Begin ClrScr; Write('X='); Readln(X); Write('Epsi='); Readln(eps); m:=0; y:=1; while y<x do begin m:=m+1; y:=y*2; end; y:=1; for i:=1 to m div 2 do y:=y*2; Repeat y1:=y; y:=0.5*(y1+x/y1); Until abs(y-y1)<eps; Writeln('Y=',y:8:5); Repeat Until Keypressed End. 6.2.3.Aplicatii propuseAplicatia P3. Sa se realizeze programul in limbajul Pascal care aproximeaza functia y=1/x utilizand metoda iterativa. Aplicatia P4. Sa se realizeze programul in limbajul Pascal care aproximeaza functia y=5/x2. 3. Aproximarea prin fractii continue3.1. Prezentare teoreticaO fractie continua este o relatie de forma: (25) unde ai si bi sunt numere intregi sau reale, dar de regula se folosesc pentru numerele ai si bi numere intregi. Pentru aproximarea functiilor ai si bi pot fi functii de x. Simplificat si compact, o astfel de reprezentare se scrie (26) Se numeste o fractie continua simpla reprezentarea in care toate numerele bi sunt unu iar numerele ai sunt intregi si mai mari ca zero, adica: (27) Intr-o forma compacta fractiile continue simple se pot scrie: (28) Fractiile continue de regula converg mult mai repede decat seriile de puteri. Reprezentarea prin fractii continue a functiei tangent este: (26) 3.2. Aplicatii propuseAplicatia 3. Sa se realizeze programul in limbajul Pascal care aproximeaza functia tan(x) prin intermediul fractiilor continue. Pentru teste se va lua x=p Rezolvare Programul care va aproxima functia tangent prin fractii continue va trebui sa tina cont de faptul ca evaluarea fractiilor continue de la dreapta la stanga este o strategie gresita datorita faptului ca nu putem deduce de la ce ordin al aproximatiei se va realiza precizia dorita. De aceea se va prezenta in continuare algoritmul lui Lentz modificat pentru evaluarea fractiilor continue (pentru detalii suplimentare referinta [1] si [2]). Algoritmul metodei presupune ca evaluarea se termina atunci cand cu e suficient de mic (de exemplu). Pentru algoritmul de mai jos (figura 5) e este un numar mai mic decat numarul e folosit pentru evitarea impartirii la zero. Algoritmul metodei este prezentat in figura 5:
Figura 5.Algoritmul Lentz modificat pentru calculul fractiilor continue. Programul pentru evaluarea functiei tangenta prin fractii continue se numeste tan_cfract si este prezentat in lista 5 Lista 5. Programul pentru aproximarea functiei tg prin fractie continua Program tan_cfract; Uses CRT; Var K,i,N:Integer; e1,e2,f,c0,c1,a,b,d0,d1:Real; Begin e1:=1e-9; Lista 5. Programul pentru aproximarea functiei tg prin fractie continua (continuare) ClrScr; Write('eroarea admisa='); Readln(e2); Write('X='); Readln(X); a:=0; I:=1; Repeat C:=C*(n-i+1)/i; I:=I+1; Until i>k; Writeln('C=',C:8:0); Repeat Until Keypressed End. 2.3.Aplicatii propuseAplicatia P5. Sa se realizeze programul in limbajul Pascal care aproximeaza functia ex folosind fractii continue. Aplicatia P6. Sa se realizeze programul in limbajul Pascal care aproximeaza functia sin(x) folosind fractii continue.
|