Sunteți pe pagina 1din 12

Liceul Teoretic N.

Titulescu CRAIOVA

PROIECT DE DIPLOMA
Tema: Rezolvarea numerica a ecuatiilor algebrice si transcendente

Prof.indrumator ELLY NEAGU

Elev: STANOI CRISTIAN FLORIN

clasa XII A

Promotia 2000
REZOLVAREA NUMERICA A ECUATIILOR ALGEBRICE SI TRANSCENDENTE Introducere Fie f : X R R si ecuatia f( x )=0 . Daca f( x) este un polinom sau in urma unor transformari poate fi adusa la forma polinomiala , ecuatia se numeste algebrica, in caz contrar o vom numi transcendenta . Rezolvarea ecuatiei f(x)=0 implica parcurgerea a doua etape : a). Separarea radacinilor ecuatiei necesitand determinarea unui interval in care se gaseste fiecare din radacinile reale ale ecuatiei . Separarea radacinilor se poate face prin metoda sirului lui Rolle sau adeseori folosind datele problemei practice ce conduce la ecuatia respectiva . Alta procedura consta in aproximarea functiei f(x) printr-un polinom de interpolare, radacinile polinomului de interpolare servind ca valori aproximative initiale pentru radacinile ecuatiei . b). Calculul aproximativ pentru fiecare radacina reala si evaluarea erorii. Sa presupunem , de exemplu , ca in intervalul (a,b) a fost separata radacina reala pentru ecuatia respectiva . Aceasta inseamna ca graficul functiei intersecteaza in axa ox (fig 1.) . f(x) a

fig.1

Prin radacina aproximativa se intelege o valoare x suficient de apropiata de valoarea exacta . Cu alte cuvinte, daca se da o valoare acceptabila a erorii , trebuie sa avem :

x - < , > 0 .
Se prezinta in continuare cateva dintre metodele cele mai des utilizate pentru calculul aproximativ al radacinii . METODA INJUMATATIRII INTERVALULUI Fie functia continua f : [ a,b ] R si ecuatia f(x) = 0. In plus , se considera ca f(a) f(b) 0 . In acest caz f are pe [a,b] un numar impar de radacini . Asa cum arata si numele, aceasta metoda consta in injumatatirea succesiva a intervalului [a,b] . Fie eroarea admisa . f(x) A o a a1 a2 Fig. 2 Daca f[(a+b)/2] =0, atunci (a+b)/2= reprezinta chiar radacina cautata. Daca nu, folosind punctul (a+b)/2, se imparte intervalul [a,b] in jumatate (Fig. 2). Se retine acea jumatate pentru care efectuand produsul valorilor functiei evaluate in capetele subintervalului, obtinem o valoare mai mica decat zero. Aceasta este o indicatie ca radacina cautata se gaseste in acel subinterval .
3

(a+b)/2 b b1 B b2

Se noteaza cu [ a1 , b1 ] subintervalul astfel determinat. Continuand, se obtine succesiunea de subintervale [a2,b2],, [an,bn]cu proprietatile f(an) f(bn) < 0 , bn an= 1/2 n(b a) ; n=1, 2, .. Se obtin astfel sirurile (an) crescator sau constant si (bn) sir descrescator sau constant . Avem = lim an = lim bn . Dupa n n n injumatatiri succesive, se poate alege ca valoare aproximativa pentru , valoarea : x =( an + bn ) / 2 . Eroarea care se comite daca inlocuim pe prin x , va fi :

x = - x 1/2n b- a . Metoda injumatatirii intervalului este cea mai simpla dar si cea mai slab convergenta metoda pentru calculul aproximativ al radacinii unei ecuatii date. Daca au fost separate mai multe radacini, algoritmul expus anterior poate fi utilizat pentru calculul aproximativ al fiecarei radacini in parte. Daca nu au fost separate radacinile in prealabil, algoritmul poate fi utilizat notand : a1= - , b1 = 0 daca f( - ) f(0) < 0 sau a1= 0 , b1 = + , daca f(0) f( ) < 0 . In practica simbolul va fi inlocuit cu o valoare mare, convenabil aleasa.
program metoda-injumatatirii ; var a , b , h, x, xmin, xmax : real ; zero : boolean ; function func ( x : real ): real ; begin func : = ( x+ 1)( x+ 1) x( x )( x ) ; 1 2 end ; procedure bisect( a , b: real ; var x : real ; var zero : boolean ); const
4

eps : 1 e 10 ; var dx , fa , fb , fx: real ; begin zero : = true ; x : = a ; fa : = func ( a ) ; if abs ( fa )< = eps then x : = b ; fb : = func ( b ); if abs (fb )< = eps then exit

exit ; ;

if fa fb < 0 then repeat x : = ( a +b ) / 2 ; fx : = func ( x ) ; if fa fx < 0 then b : = x else a : = x ; dx : = b a ; if x < > 0 then dx : = dx / x until ( abs ( dx ) < = eps ) or ( abs( fx ) < = eps ) else zero : = false ; end; begin write ( xmin = ) ; readln ( xmin ) ; write ( xmax = ) ; readln ( xmax ) ; write ( h = ) ; readln ( h ) ; a : = xmin ; repeat b : = a + h ; bisect ( a , b , x , zero ) ; if zero and ( x < >b ) then writeln ( x = , x : 9 ) ; a := b; until a > xmax ; end .

METODA LUI NEWTON ( metoda tangentelor )


5

Fie ecuatia algebrica sau transcendenta f( x ) = 0 care are in intervalul [ a , b ] o singura radacina reala . Sa presupunem in plus ca derivatele f ( x) si f ( x) sunt functii continue si pastreaza un semn constant pe intervalul [ a , b ] .

Asa cum arata si numele , metoda tangentelor propune aproximarea radacinii prin sirul x1 , x2, . . . . . . , xn , . . . . . . . determinat prin intersectia tangentelor duse la curba in punctele A0 , A1 , . A n cu axa Ox (fig.6). Fie punctul Ak [ x k , f ( xk)]. Ecuatia tangentei la curba y= f( x ) in acest punct se scrie y f(xk) = f ( xk )( x - xk ) . Sa notam prin xk+1 abscisa punctului de intersectie a acestei tangente cu axa Ox (deci y =0 ). Se obtine : xk+1 = xk - f( xk ) / f (xk ) ; k=0 , 1 , 2 , . . Expresia de mai sus poarta numele de formula iterativa a lui NEWTON. Din figura se observa ca valoarea aproximativa initiala x0 a fost aleasa egala cu a , deci astfel ca f(x0) f (x0) > 0 .

Aceasta este conditia alegerii punctului de start in metoda lui NEWTON , asigurandu-se astfel ca x1 [ a , b ] . Sa notam in continuare: ( x)= x f ( x)/ f ( x) Functia ( x) poarta numele de functie de iterare a metodei lui NEWTON . Se verifica imediat ca: () = , ( ) = 0 , () 0. Cu ajutorul functiei de iterare formula lui NEWTON devine : xk+1 = ( xk ) , k=0,1,2, .. Se observa ca metoda lui NEWTON este de fapt un caz particular al metodei aproximatiilor succesive . Pentru a analiza cum se propaga eroarea in metoda lui NEWTON se dezvolta functia de iterare in serie TAYLOR in vecinatatea punctului x= : ( x)= () + ( x) / 1! ( ) + ( x) / 2! ()+..... In aceasta dezvoltare facem x = xk , apoi trunchiem dupa termenul al doilea . Tinand seama de proprietatile functiei de iterare , obtinem : ( xk ) = + ( xk ) / 2! () Deoarece ( xk) = xk+1 , putem scrie : xk+1 = () / 2! (xk- ) sau notind prin (xk- ), eroarea la pasul k , avem xk+1 = () / 2! k Aceasta relatie evidentiaza ca metoda lui NEWTON are gradul de convergenta patratic , adica eroarea la fiecare iteratie este proportionala cu patratul erorii de la iteratia anterioara . Rezulta ca metoda lui NEWTON converge mai repede decat metoda aproximatiilor succesive . Pe de alta parte, metoda lui NEWTON reclama necesitatea evaluarii functiei si a derivatei sale la fiecare iteratie , fapt ce poate fi dificil sau chiar imposibil, daca, de exemplu, functia f nu este cunoscuta analitic , ci prin intermediul unei tabele de valori. In practica, alegerea intre metoda
7

aproximatiilor succesive si metoda lui NEWTON se face in functie de forma lui f. program metoda_NEWTON ; var x , dx: real ; zero: boolean ; function func ( var x , dfunc: real ): real ; begin func : = x - sin ( x ) 0.25 ; dfunc : = 1 cos ( x ) ; end ; procedure NEWTON ( var x, dx : real; var zero: boolean) ; const eps = 1e 10 ; imax = 50 ; var f , df: real ; i : integer ; begin zero : = true ; i: = 0 ; repeat i: = i+1 ; dx: = func ( x , df ); if abs ( df ) > eps then dx: = dx / df x : = x dx ; if x < >0 then dx : = dx / x ; until ( abs ( dx ) < = eps ) or ( i > = imax ) ; if i > = imax then zero: = false ; end ; begin write ( x = ) ; readln ( x ) ;
8

Newton ( x , dx , zero ) ; if zero then writeln ( x = , x : 8:1 , dx = , dx : 6:1 ) ; readln end . Functia func calculeaza atat valoarea functiei pentru care se cauta zeroul, cat si valoarea derivatei acestei functii ( dfunc ). Procedura NEWTON are ca argumente de tip variabila x , dx ( zeroul si eroarea relativa asociata ) , x fiind atat data de intrare cat si data de iesire. Ciclul iteratiilor din procedura NEWTON este codificat ca o structura REPEAT UNTIL, conditia de iesire din ciclu implicand fie scaderea erorii radacinii sub limita admisa , fie depasirea numarului maxim de iteratii datorita convergentei lente sau chiar divergentei procesului iterativ. In cazul depasirii numarului maxim de iteratii, variabilei logice zero i se atribuie valoarea false. Daca pe parcursul procesului iterativ se anuleaza derivata functiei (dfunc=0), se executa o iteratie de salvare in care corectia radacinii se calculeaza ca in cazul metodei aproximatiilor succesive , adica fara a o imparti la derivata functiei. Aceasta abordare rezolva si situatiile zerourilor de ordin superior, in care atat functia cat si prima derivata au acelasi zero. Metoda lui NEWTON este in general mai rapid convergenta decat metoda aproximatiilor succesive. Astfel in cazul ecuatiei : x - sin x - 0.25 = 0 pornind de la aproximatia initiala x0 = 0, metodei lui NEWTON ii sunt necesare zece iteratii pentru a obtine solutia x=1.17123, in timp ce metodei aproximatiilor succesive ii sunt necesare 28 de iteratii . Datorita faptului ca metoda lui NEWTON face necesar calculul derivatei functiei, in cazurile in care acest calcul este dificil sau chiar imposibil, se recurge frecvent la metoda aproximatiilor succesive . In procedura NEWTON se elimina din corpul structurii REPEAT-UNTIL instructiunea :
9

if abs ( df ) > eps then dx : = dx / df ; si se redenumeste in consecinta procedura .

METODA SECANTEI ( metoda corzii ) Metoda secantei este utilizata ca si metoda bisectiei, pentru gasirea radacinii a ecuatiei f ( x ) = 0 izolata intr-un interval [a, b], in cazul in care f(a) f(b) < 0 . Principala deosebire fata de metoda bisectiei consta in faptul ca subintervalele succesive [ a1 , b1] , [ a2 , b2] , . . . . . [ ai , bi] nu se obtin prin injumatatire , ci prin impartirea intervalului anterior in raportul f ( ai-1) / f ( bi-1 ). Desi in general mai eficienta decat metoda bisectiei, metoda secantei este mai avantajoasa tot numai pentru determinarea grosiera a radacinilor reale ale ecuatiilor algebrice si transcendente , furnizand aproximatii initiale pentru radacini , necesare altor metode iterative. Programul implementeaza in procedura SECANT metoda Secantei, aceasta procedura inlocuind procedura BISECT. Se observa ca in acest caz este necesara reactualizarea valorilor functiei pentru capetele intervalului, dupa fiecare proces de pozitionare a intervalului de cautare, deoarece acestea intervin in calculul urmatorului punct de partitionare xi+1. program metoda_secantei ; var a , b , h , x , xmin , xmax : real ; zero : boolean ; function func ( x: real ): real ; begin func : = ( x+2 ) (x +1 ) x ( x- 1 ) ( x 2 ) ; end ;
10

procedure secant (a,b: real; var x: real ; var zero : boolean ) ; const eps = 1e - 10 ; var dx , fa , fb , fx : real ; begin zero : = true ; x : = a ; fa : = func( a ) ; if abs (fa ) <= eps then exit ; x : = b ; fb : = func ( b) ; if abs ( fb) <= eps then exit ; if fa fb < 0 then repeat x : = ( a fb b fa ) / ( fb fa ) ; fx : = func ( x) if fa * fb > 0 then begin a: = x ; fa : = fx ; end else begin b : = true ; fb : = fx ; end ; dx : = b a ; if x <> 0 then dx : = dx / x until ( abs( dx)<= eps ) or ( abs ( fx ) <=eps ) else zero : = false ; end ; begin write ( xmin = ) ; readln ( xmin ) ; write ( xmax = ) ; readln ( xmax ) ; write ( h = ) ; readln ( h ) ; a : = xmin ; repeat b : = a + h ; secant ( a , b , x , zero ) ; if zero and ( x <> b ) then writeln ( x = , x : 9 )

;
11

a := b ; until a > xmax ; end .

12

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