Sunteți pe pagina 1din 16

Lucrarea 2 REZOLVAREA NUMERIC A ECUAIILOR ALGEBRICE 1.

SCOPUL LUCRRII
Prezentarea unor metode de rezolvare a ecuaiilor algebrice, i implementarea acestora n limbaje de nivel nalt (n particular, C).

2. PREZENTARE TEORETIC
Calculul rdcinilor unei ecuaii se face n dou etape: a) Separarea rdcinilor. b) Calculul lor cu o eroare impus. 2.1. SEPARAREA RDCINILOR funcia
f :[a , b] R,
x a ,b [

Considerm algebric f(x =0 . ) (2.1)

ecuaia

Separarea rdcinilor unei ecuaii f ( x ) = 0 const n determinarea unor intervale n domeniul de definiie al funciei, n care s existe o singur rdcin real. Pentru separarea rdcinilor reale exist mai multe metode dintre care amintim: metoda irului lui Rolle, metoda irului lui turm i metoda lui Budan- Fourier. 2.1.1. METODA IRULUI LUI TURM Considerm funcia definit pe f :[a , b] R, care ndeplinete condiiile de continuitate i derivabilitate pentru x a ,b ] . [ Definiia 2.1 irul de funcii f0,f1, f2......fm continue pe [a , b] care satisfac condiiile: a) f0(x) =f(x);

ndrumar de laborator pentru Metode Numerice [ b) fm(x) 0 pentru x a ,b ] ; [ c) dac fi(x) =0, 1im-1 i x a ,b ] , atunci fi1(x)*fi+1(x)<0; x a ,b ] , [ d) dac f0(x)=0 pentru atunci f0(x)*f1(x)>0 se numete irul lui turm asociat funciei f(x).

Numrul rdcinilor ecuaiei f(x) n intervalul [a , b] este dat de urmtoarea teorem: Teorema 2.1 Fie irul lui turm f0,f1, f2......fm , ataat funciei f(x) cu condiiile f(a) 0 i f(b) 0, atunci numrul de rdcini ale ecuaiei f(x)=0 n intervalul [a , b] este dat de diferena numrului de variaii de semn ale irurilor: f0(a),f1(a), f2(a)......fm(a) f0(b),f1(b), f2(b)......fm(b) n cazul funciei polinom P(x) care este definit pe R, Teorema 2.1 devine: Teorema 2.2 Fie P0, P1, P2,......Pm un ir de polinoame construit astfel P0=P, P1=P, iar Pi+1 este restul mpririi lui Pi-1 la Pi luat cu semn schimbat, pentru 2im. Atunci numrul de rdcini ale ecuaiei P(x)=0 este egal cu diferena dintre numrul de schimbri de semn ale irurilor: P0(-), P1(-), P2(-),......Pm(-) P0(), P1(), P2(),......Pm() 2.1.1.1. Algoritmul 2.1. irul lui turm
{// Variabile ( ntreg grad, real P1[], real P2[], // gradul polinomului // vectorul coeficienilor polinomului // vectorul coeficienilor derivatei //polinomului; // vectorul coeficienilor restului // pentru calculul coeficienilor restului

real Rez[], real C1, real C2 // coeficienii pentru calculul coeficienilor restului )

{ pentru i=grad-1 pana la 0 calculeaz P2[i]=(i+1)P1[i+1]; daca grad=0 Rez(0)=P1(0)-P1(1) ; // Restul are gradul grad-2 altfel

Lucrarea 2
{ calculeaz C1 = P1[grad]/P2[grad-1]; calculeaz C2 = (P1[grad-1]-C1*P2[grad-2])/P2[grad-1]; pentru i=grad-2 pana la 1 calculeaz Rez(i)=P1(i)-C1*P2[i-1]-C2*P2[i]; calculeaz Rez(0)=P1[0]=P1-C2*P2[0]; } Tiprete coeficienii restului cu semn schimbat; }

Not: Programul irului lui turm este implementat pe calculator i poate fi utilizat. 2.2. CALCULUL ALGEBRICE RDCINILOR REALE ALE ECUAIILOR

Pentru calculul rdcinilor reale ale unei ecuaii algebrice se utilizeaz mai multe metode numerice. Dintre acestea vom studia: metoda biseciei (bipartiiei), metoda aproximaiilor succesive, metoda lui NewtonRaphson i metoda lui Bairstow. 2.2.1. METODA BISECIEI (BIPARTIIEI) Fie funcia continu f : [a , b] R i ecuaia f ( x ) = 0 care are soluie unic pe intervalul [a , b] . Pentru condiiile date funcia satisface inecuaia f ( a ) f ( b) 0 . Se pune problema determinrii soluiei a ecuaiei f ( x ) = 0 pe intervalul [a , b] , cu o anumit eroare . Metoda const n njumtirea intervalului si stabilirea subintervalului n care se gsete soluia ecuaiei. 2.2.1.1. Algoritmul 2.1. Bisecia pentru polinoame
//funcia ntoarce: True(1) in caz de succes (s-a gsit rdcina); // False (0) in caz de eec. intreg BisPol ( intreg n, // gradul polinomului real A, // coeficienii polinomului real ls, // limita stnga a intervalului real ld, // limita dreapta a intervalului real er, // eroarea de aproximare. real *rad // adresa rdcinii ( pointer) ) { // variabile locale real xm ; // jumtatea intervalului, variabil de lucru

7
real ls, ld ;

ndrumar de laborator pentru Metode Numerice


// noile valori ale limitelor intervalului // instruciunile ce compun funcia: daca (valPol( n, A, ls) * valPol( n, A, ld) > 0) return False; daca (valPol( n, A, ls) == 0) {*rad = ls; return True;} daca (valPol( n, A, ld) == 0) {*rad = ld; return True;} xm=(ls+ld)/2 ; // condiia de intrare in ciclul while ce urmeaz . cat timp( (fabs(ld-ls) > er) I (valPol( n, A, xm) != 0) { xm=(ls+ld)/2; daca ( valPol( n, A,xm) * valPol(n, A, ls) <0) ld = xm; altfel ls=xm; // se stabilesc noile limite ale intervalului. } *rad = xm ; // stabilesc valoarea rdcinii drept mijlocul ultimului interval // ce satisface condiiile buclei while() anterioare. return True ; // succes: am gsit rdcina. }

Obs.: Funcia valPol() care calculeaz valoarea unui polinom ntr-un punct este prezentat n Anexa 2. 2.2.1.2. Algoritmul transcendente 2.2. Bisecia pentru ecuaii

//funcia ntoarce: True (1) in caz de succes(s-a gsit rdcina); // False (0) in caz de eec. ntreg Bis_Functie ( Adr(functie),

real ls, // real ld, // real er, // real *rad // ) { // declaraiile variabilelor locale real xm ; // mijlocul intervalului

// adresa funciei din ecuaia f(x)=0 // (pointer la funcie) limita stng a intervalului de calcul limita dreapt a intervalului de calcul eroarea de calcul adresa variabilei rdcina (pointer)

// instruciunile rutinei de calcul daca ( functie( ls) * functie( ld) > 0) return False; daca ( functie( ls) == 0) {*rad = ls; return True;} daca ( functie( ld) == 0) {*rad = ld; return True;} xm=(ls+ld)/2; // condiia de intrare n ciclul while ce urmeaz. cat timp( ( fabs(ld-ls) > er) SI ( functie( xm) != 0) ) { xm=(ls+ld)/2 ; daca ( functie( xm) * functie( ls) <0) ld = xm; altfel ls = xm; //se stabilesc noile limite ale intervalului. }

Lucrarea 2
*rad = xm ; // stabilesc valoarea rdcinii drept mijlocul ultimului // interval ce satisface condiiile buclei while() // anterioare. return True ; // succes: am gsit rdcina. }

Obs.: Notaia Adr(functie) este simbolic. Ea semnific un pointer ctre funcie. Vedei anexa Noiuni de C pentru laborator pentru modul de declarare i folosire a unui pointer ctre o funcie.

2.2.2. METODA APROXIMAIILOR SUCCESIVE Fie funcia f : [a, b] R continu i derivabil pe ( a , b) i ecuaia f ( x ) = 0 , care pe intervalul (c,d) ( a , b) are o rdcin unic , f () = 0 .Presupunem c ecuaia f ( x ) = 0 , se scrie sub forma: x =(x ) (2.2) Pentru x o o aproximaie iniial, avem urmtoarele succesiuni de aproximaii: x1 = ( x0 ) , x 2 = ( x1 ) , x 3 = ( x 2 ) , ... , x n = ( x n-1 ) (2.3) Ca urmare formula x n = ( x n-1 ) reprezint o formul de iteraie. Calculul soluiei prin metoda aproximaiilor succesive se face funcie de o eroare impus care d criteriul de oprire al programului. Algoritmul se termin cnd:
| x n x n 1 |<

(2.4) ceea ce arat c diferena dintre dou valori consecutive calculate este mai mic dect , sau cnd: | f ( x n ) |< (2.5) i atunci soluia ecuaiei este aproximat de xn , pentru suficient de mic.

ndrumar de laborator pentru Metode Numerice 2.2.2.1. Algoritmul 2.3. Aproximaii succesive
//funcia ntoarce: True(1) in caz de succes (s-a gsit rdcina); // False (0) in caz de eec. ntreg Aprox_Succesive ( Adr( fi), // adresa funciei fi(x) din egalitatea // x=fi(x) (pointer la funcie) real ls, // limita stng a intervalului de calcul real ld, // limita dreapt a intervalului de calcul real x0, // punctul de start - aproximaia iniial // necesar algoritmului real er, // eroarea de calcul // real h, // pasul de derivare ntre dou abscise// se poate adopta i varianta // declarrii sale ca variabila local real *rad // adresa variabilei rdcina (pointer) ) {// declaraiile variabilelor locale: real pc ; // punctul curent de derivare. real xn, xn_1; // valorile curent i respectiv anterioar a // rdcinii. // real h ; // pasul de derivare (ca variabil local - este // posibil s fie dat ca argument) real der; // variabil n care se ine valoarea derivatei // funciei fi(x). // instruciunile rutinei de calcul pc = ls ; // pornesc cu ls n verificarea derivatei funciei // fi(x) pe intervalul dat. // verific dac funcia fi(x) are derivata subunitar pe ntreg // intervalul considerat. repet{ der = ( *Adr(fi)( pc+h) - *Adr(fi)( pc)) / h ; daca der >=1 return False ; pc=pc+h; // trec la urmtoarea abscis, cu un // pas ct mai mic. } ct timp(pc<=ld); xn = x0; repet { // modific pe x0 pn cnd este ndeplinit condiia de oprire. xn_1 = xn; // valoarea curent devine valoare anterioar xn = *Adr(fi)(xn_1); } ct timp(fabs(xn-xn_1) <er); *rad = xn; // valoarea rdcinii este ultimul xn return True; }

Lucrarea 2 2.2.3. METODA NEWTON-RAPHSON

10

Aplicnd metoda aproximailor succesive cu vitez de convergen mrit pentru care considerm = x n rezult: 1 ( x n ) xn x n +1 = xn + 1 ' ( xn ) (2.6) Aceast expresie reprezint o formul de iteraie pentru ( determinarea soluiei ecuaiei x = x ) i se numete formula Newton-Raphson. Formula de iteraie poate fi reprezentat sub forma:

x n+1 = g ( x n )

unde

g( x) =

( x ) x ' ( x ) 1 ' ( x )

(2.7) Condiia de convergen a irului de corecii spre soluia 1 ecuaiei este dat de relaia: g' ( x ) < . Formula Newton - Raphson (2.6) poate fi scris i pentru ecuaia implicit f ( x ) = 0 astfel: f ( x n-1 ) x n+1 = x n ' f ( x n-1 ) (2.8) unde f ( x ) = ( x ) x = 0 .

2.2.3.1. Algoritmul ecuaii transcendente

2.4.

Newton-Raphson

pentru

//funcia ntoarce: True(1) in caz de succes (s-a gsit rdcina); // False (0) in caz de eec. ntreg NewtonRaphson ( Adr( f), // referina la funcia f(x) din ecuaia f(x)=0 real x0, // valoarea iniial necesar algoritmului real er, // eroare de aproximare rdcinii int nMax // numrul maxim de iteraii impus pentru // aflarea soluiei cu eroarea er . real *rad // adresa variabilei in care inem rdcina ) { // declaraiile variabilelor locale: real xn, xn_1; // valoarea curent i anterioar a rdcinii real h; // pasul de derivare real der; // valoarea derivatei

11

ndrumar de laborator pentru Metode Numerice


// instruciunile metodei xn=x0; h=0.0001; repet{ xn_1=xn; der=(*Adr(f)(xn-1+h) - *Adr(f)(xn-1) )/h; dac (der= =0) return False ; xn=xn_1-F(xn_1)/der ; nMax=nMax-1; // sau: nMax-- ; } ct timp( (fabs(xn-xn_1)>=er) I (nmax>0)) ; dac (nmax= =0) return False ; *rad=xn; // am gsit rdcina return True; // succes. }

Obs.: Notaia Adr(functie) este simbolic. Ea semnific un pointer ctre funcie. Vedei anexa Noiuni de C pentru laborator pentru modul de declarare i folosire a unui pointer ctre o funcie. 2.2.4. METODA NEWTON-RAPHSON PENTRU POLINOAME Aceast metod mai poart numele i de metoda Birge Vieta. Fie ecuaia polinomial P( x ) = 0
P( x ) = a mx m + a m1x m1 +...+a1x + a 0

Aplicm formula de calcul polinomial, astfel c avem:


x n+1 = x n P' ( xn ) P( x n )

(2.8)

considernd

funcie

(2.9) 2.2.4.1 Algoritmul polinoame 2.5. Newton-Raphson pentru

//funcia ntoarce: True(1) in caz de succes (s-a gsit rdcina); // False (0) in caz de eec. ntreg Newton_Raphson_P ( ntreg n, // gradul polinomului ntreg nMax, // numrul maxim impus de iteraii se // poate da ca argument sau ca variabil

Lucrarea 2
real A[ ], real x0, real er, real *rad ) { // declaraiile variabilelor locale real xn, xn_1; // valoarea curent respectiv anterioar a rdcinii //int nMax ; // numrul maxim de iteraii - se poate da fie ca // variabil local, fie ca argument al funciei xn=x0; repet{ xn_1=xn; dac Derpol(n,A,xn_1)=0 return False; xn=xn_1-Valpol(n,A,xn_1)/Derpol(n,A,xn_1); nMax=nMax-1; // sau: nMax-- ; } ct timp( (fabs(xn-xn_1)>=er) I (nmax>0) ); dac (nMax == 0) return False ; *rad=xn; return True; } // // // // // local vectorul coeficienilor polinomului valoarea de start eroarea de calcul rdcina ecuaiei

12

Funcia ValPol() care calculeaz derivata unui polinom ntr-un punct i DerPol() care calculeaz valoarea derivatei unui polinom ntr-un punct sunt prezentate n Anexa 2.

2.3. CALCULUL RDCINILOR REALE I COMPLEX-CONJUGATE ALE ECUAIILOR ALGEBRICE 2.3.1. METODA LUI BAIRSTOW Aceast metod determin toate rdcinile att reale ct si complexe ale unei ecuaii polinomiale cu coeficieni reali. Fie ecuaia:
Pn ( x ) = x n + an 1x n 1 + an 2 x n 2 +...+a1x + a0 = 0

(2.10)

13

ndrumar de laborator pentru Metode Numerice

care admite soluiile x1, x2 , x3 ,..., xn care pot fi reale i complexe. Se descompune polinomul (2.10) n produs de dou polinoame, unul de gradul doi i altul de grad n-2. Dou soluii ale polinomului iniial sunt cele dou rdcini ale polinomului de gradul doi care pot fi calculate uor i ele pot fi reale sau complexe. Vom descompune polinomul iniial astfel: a n x n + a n 1 x n 1 + a n 2 x n 2 + a n 3 x n 3 + ... + a1 x + a0 =

(b x
n

n 2

+ bn 1 x n 3 + bn 2 x n 4 + ... + b3 x + b2 x 2 + s n x + p n + Sx + R

)(

Algoritmul 2.3.1.1. respect notaiile de mai sus. 2.3.1.1. Algoritmul 2.6. Metoda lui Bairstow
//funcia ntoarce: True(1) n caz de succes (s-a gsit rdcina); // False (0) in caz de eec. ntreg Bairstow ( ntreg grad, // gradul polinomului, ntreg real a[ ], // vectorul coeficienilor polinomului real eps, // eroarea de calcul real s0, // valoarea de start pentru sn real p0, // valoarea de start pentru pn ntreg niter, // numrul de iteraii real *solr, // vectorul prilor reale ale soluiilor real *soli // vectorul prilor imaginare ale soluiilor ) { // declaraiile variabilelor locale real b[DIM] ; // vectorul b conform descompunerii; real bs[DIM], bp[DIM] ; // vectorii derivatelor polinomului n // raport cu s, respectiv p // constanta DIM (dimensiunea vectorilor) se stabilete n momentul // scrierii programului real S, R ; real Ds, Dp ; real Ss, Sp ; real Rs, Rp ; real sn, pn ; real irad; int i, k ; // // // // // // // coeficienii restului variaiile lui sn respectiv pn derivatele lui S n raport cu s respectiv p derivatele lui R n raport cu s respectiv p coeficienii polinomului de gradul 2 indicele rdcinii curente ntreg; indici ntregi ; // normarea lui a

pentru i=0,grad a[i]=a[i]/a[grad]; irad = 1 ; ct timp (grad>2){ sn = s0 ; pn = p0 ; repet {// repet-pn cnd // calculul polinomului B

Lucrarea 2
b[grad]=1; b[grad-1]=a[grad-1]-sn; pentru k =[grad+2, 2] b[k] =a[k]-sn*b[k+1]-pn*b[k+2]; // calculul coeficienilor restului S=a[1]-b[2]*sn-b[3]*pn; R=a[0]-b[2]*pn; // calculul derivatei polinomului b n raport cu s bs[grad] =0; bs[grad-1] =-1; pentru k=grad-2 pn la 2 bs[k] =-b[k+1]-sn*bs[k+1]-pn*bs[k+2]; // derivarea coeficienilor restului n raport cu s Ss=-b[2]-sn*bs[2]-pn*bs[3]; Rs=-bs[2]*pn; // calculul derivatei polinomului b n raport cu p bp[grad] =0; bp[grad-1] =0; pentru k=grad-2 pn la 2 bp[k] =-sn*bp[k+1]-b[k+2]-pn*bp[k+2] ; // derivarea coeficienilor restului n raport cu p Sp=-bp[2]*sn-b[3]-pn*bp[3]; Rp=-bp[2]*pn-b[2];

14

// Se aplic metoda Newton-Raphson pentru rezolvarea sistemelor de // ecuaii neliniare dac Ss*Rp-Sp*Rs=0 return False ; // Ss*Rp-Sp*Rs este det. sistemului Ds=(-S*Rp+R*Sp)/(Ss*Rp-Sp*Rs); Dp=(-Ss*R+Rs*S)/(Ss*Rp-Sp*Rs); sn=sn+Ds; pn=pn+Dp; // noile aproximaii ale lui sn i pn i=i+1; // incrementez contorul de iteraii } ct timp ( (( Ds >= eps) SI ( D p >= eps)) SAU ( i<=niter)); dac (i>niter) return False ; EcGr2(1,sn,pn,solr[irad],soli[irad],solr[irad+1],soli[irad+1]); // rezolv ec. de gradul 2 grad=grad-2; pentru k=grad pn la 0 a[k]=b[k+2]; // formez noua ecuaie irad=irad+2; // incrementez indicele rdcinii } // ct timp( grad>2) . dac ( grad = = 1) { solr[irad]=EcGr1(a[1],a[0]); soli[irad]=0; return True; } // rezolv ecuaia de gradul 1

15

ndrumar de laborator pentru Metode Numerice


dac (grad = = 2) { // rezolv ec. de grd. 2 EcGr2(a[2],a[1],a[0],solr[irad],soli[irad],solr[irad+1],soli[irad+1; return True; } }// sfritul funciei.

Not: Programul cu metoda lui Bairstow este implementat pe calculator i poate fi utilizat.

3.

DESFURAREA LUCRRII

S se implementeze algoritmii 3.1-3.6 ntr-un limbaj de nivel nalt. 3.1. Se consider un amplificator integrat, avnd n bucl deschis o amplificare de forma:
H ( s) = 338 .6260295 s + 0.5284 s + 0.05120153 s + 0.0009680743 7
3 2

S se determine polii amplificatorului. Se determin numrul de rdcini reale ale polinomului de la numitorul funciei de transfer. Se aplic programul turm care implementeaz metoda de formare a irului lui turm pentru numitorul funciei de transfer. Programul turm este n directorul de lucru. Se scrie irul lui turm. Primii doi termeni ai irului sunt polinomul dat i derivata lui. Se completeaz Tabelul 1. Tabelul 1 P(s) P(-) P(+) Diferena dintre numrul de schimbri de semn a irului lui turm la - i la + reprezint numrul de rdcini reale ale polinomului. Se ncadreaz soluiile n intervale. Se scrie irul: P(s)= P(s)= P(s)= P1(s) P2(s) P3(s) n-, n+

Lucrarea 2

16

Se rezolv fiecare ecuaie cu o metod aleas (de exemplu bisecia) i se completeaz tabelul 2. Li i Ls se aleg astfel ca soluiile polinomului s fie cuprinse ntre ele (de exemplu -1000 i 1000). Tabelul 2 P(s Li ) LI P (s | ) | P(s) | s3 s0 s1 s1 | | s2 s2 |

s1,s2,s3 sunt polii funciei de transfer. 3.2. Se consider funcia de transfer a unui filtru analogic de tip Cebev dat sub forma: 0.04381 H ( s) = 4 3 s + 0.6192 s + 0.61401692 s 2 + 0.20379268 s + 0.0491588 S se determine polii filtrului. Un amplificator are n bucl deschis o funcie de transfer de forma a(s) =10/(s(s+1)(s+2)) a) S se determine polii funciei de transfer. b) S se traseze caracteristicile Bode pentru amplificatorul n bucl deschis. 3.4. S se determine valoarea tensiunii i a curentului prin diod, n situaia urmtorului circuit (cel de polarizare al diodei). Se dau: R=10Kohm, E=10V, I0=1pA, VT=25mV. 3.3.

17

ndrumar de laborator pentru Metode Numerice

3.5.

Aplicnd metodele indirecte de rezolvare a ecuaiilor studiate n cadrul laboratorului (aproximaii succesive i metoda tangentei (Newton-Raphson)), calculai timpul dup care tensiunea pe condensator din circuit ce urmeaz, atinge valoarea de 0.5*E. Se d RC=1s.

3.6.

S se determine intervalul [ls,ld] de lungime 3mV care cuprinde tensiunea de 3.453V msurat pe scala de [0;5V] folosind metoda biseciei. Se d ecuaia:
ex 1 / x = 0

3.7.

care are o soluie n intervalul [0.1, 1]. S se calculeze soluia ecuaiei aplicnd metoda biseciei pentru ecuaii transcendente, metoda Newton-Raphson i metoda aproximaiilor succesive. Eroarea de calcul se consider = 0.0000000001 pentru toate metodele. S se compare rezultatele.

NTREBRI I EXERCIII

Lucrarea 2 18 4.1. Amplificarea buclei unui amplificator integrat prevzut cu reacie pur rezistiv este: T(s)=T0/(1+10s+30s2+20s3), unde s este n microsecunde-1. Valoarea mrimii T0 este 12. S se determine poziia polilor ctigului n bucla nchis pentru aceast valoare a lui T0 utilizndu-se metoda biseciei, metoda aproximaiilor succesive, metoda Bairstow i metoda Newton-Raphson. 4.2. S se gseasc rdcinile reale ale ecuaiei exp(x)=3*log(x) situate n intervalul [0.5, 1.5], eroarea 0.001, punctul de calcul 0.5, folosind metoda biseciei i metoda Newton-Raphson. 4.3. Fie polinomul -x5 + 25*x4 200*x3 + 600*x2 600*x + 120, cu eroarea 0.0001, numr de iteraii 20, intervalul [0,13]. Calculai rdcinile polinomului folosind metoda NewtonRaphson i metoda Bairstow. 4.4. S se determine IC din figura de mai jos (se utilizeaz metoda aproximaiilor succesive)

Se dau: Uo=0.4V, VT=0.025V, IS=10mA 4.5. S se determine tensiunea V(t) din urmtorul circuit utiliznd metoda Newton-Rapshon:

19

ndrumar de laborator pentru Metode Numerice tiind c Ve=5V, R1=100Ohmi, R2=1kOhm, ve(t)=6sin(2t)

5.

BIBLIOGRAFIE

I. Rusu - Metode numerice n electronic. Aplicaii n limbaj C., Editura Tehnic, Bucureti, 1997.

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