Sunteți pe pagina 1din 7

© Carmen-Sanda Georgescu, Tudor Petrovici, Radu Popa

Metode numerice. Fisa de laborator nr. 7:


REZOLVAREA NUMERICĂ A ECUAŢIILOR
ALGEBRICE ŞI TRANSCENDENTE (Metoda bisectiei, Metoda secantei,
Metoda substitutiilor successive, Metoda lui Newton)

4. REZOLVAREA NUMERICĂ A ECUAŢIILOR


ALGEBRICE ŞI TRANSCENDENTE
În această fişă de laborator se prezintă câteva metode pentru rezolvarea (determinarea rădăcinilor)
unei ecuaţii de forma f(x) = 0, dacă f : X ⊂ R → R. Când f(x) este un polinom, sau poate fi adus, prin
transformări adecvate, la forma polinomială, ecuaţia se numeşte algebrică (de exemplu: f(x) = x3-3x+1 =
0). În caz contrar, când f(x) conţine expresii trigonometrice, logaritmi, exponenţiale etc, ecuaţia se
numeşte transcendentă (de exemplu: f(x)= cosx-x = 0).
În principiu, rezolvarea ecuaţiei f(x) = 0 implică parcurgerea a două etape:
— separarea rădăcinilor ecuaţiei, prin precizarea intervalului în care se găseşte fiecare rădăcină
reală a ecuaţiei;
— determinarea aproximativă (numerică) a fiecărei rădăcini reale şi evaluarea erorii.
Pentru cazul ecuaţiei algebrice, în care f(x) se poate exprima întotdeauna sub forma:
n
f ( x ) = a0 x n + a1 x n−1 + K + a n−1 x + a n = ∑ a k x n−k , unde a0 = 1 , (7.1)
k =0
există metode specifice de determinare a rădăcinilor reale. Există metode adecvate şi pentru probleme mai
speciale, ca ecuaţiile polinomiale cu rădăcini complexe, ecuaţiile de variabilă complexă etc. În cele ce
urmează, se vor detalia acele metode care sunt uşor de programat, în vederea rezolvării problemelor
concrete.

4.1. METODE CU PROPRIETĂŢI DE CONVERGENŢĂ LINIARĂ

4.1.1. METODA BISECŢIEI

Metoda bisecţiei se mai numeşte şi metoda înjumătăţirii intervalului.


Fie funcţia continuă f : [a,b] → R şi ecuaţia f(x) = 0, algebrică sau transcendentă. Se admite ipoteza

f (a ) f (b ) ≤ 0 şi, în acest caz, f(x) are pe [a,b] un număr impar de rădăcini reale (cel puţin una).

Principiul metodei constă în înjumătăţirea succesivă a intervalului de analiză, determinarea semnului


produsului valorilor funcţiei corespunzătoare capetelor intervalului şi adoptarea unei decizii adecvate. Se
notează cu εf eroarea maximă admisibilă corespunzătoare valorii funcţiei. Algoritmul de calcul iterativ este
următorul:
Pas 1: Fie c1 =(a+b)/2 mijlocul intervalului (a,b). Se calculeaza f(c1). Daca f(c1)=0, c1 este radacina
cautata, daca f(c1)≠0 atunci se calculeaza produsele f(a)* f(c1) si f(b)* f(c1) si se pastreaza pentru
calculele urmatoare acel interval (a, c1) sau (c1,b) pentru care produsul functiei la capete este negativ
Pas 2: Presupunem ca acel interval este (a, c1). Fie c2=(a+ c1)/2 mijlocul intervalului (a, c1). Se calculeaza
f(c2). Daca f(c2)=0, c2 este radacina cautata, daca f(c2)≠0 atunci se calculeaza produsele f(a)* f(c2) si
f(c2)* f(c1) si se pastreaza pentru calculele urmatoare acel interval (a, c2) sau (c2, c1) pentru care
produsul functiei la capete este negativ
Pas 3: Se continua procedeul si se obtine sirul c1, c2, . . ., cn , . . pana cand | ck+1- ck|≤εx sau |f(ck)| ≤εf
unde k specifică ordinul iteraţiei, iar εx este abaterea impusă asupra diferenţei soluţiilor aproximative din
sirul solutiilor la două iteraţii succesive (k-1) şi k. Erorile admisibile εf şi/sau εx sunt impuse de către
utilizator !
Metoda bisecţiei este evident extrem de simplă, dar are cele mai slabe proprietăţi de convergenţă.
Dacă în prealabil s-au separat rădăcinile, metoda se poate aplica separat pe fiecare subinterval care
conţine câte o rădăcină a ecuaţiei.
Functie Octave pentru implementarea metodei bisectiei

octave#1>[radacina,eabsoluta,k,valoare]=bisectie(f,a,b,delta,max)
# f=numele functiei; [a,b]=intervalul radacinii; delta=eroare;max=nr.iteratii
ya=feval("f",a);
yb=feval("f",b);
for k=1:max
c=(a+b)/2;
yc=feval("f",c);
if yc==0
a=c;
b=c;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
endif
if b-a < delta, break,endif
endfor
radacina=(a+b)/2;
eabsoluta=abs(b-a);
valoare=feval("f",c);
endfunction

Exemplul 1. Sa se determine radacina reala a ecuatiei f(x)=x^3-x-2=0, situata in intervalul (1,2) prin
metoda bisectiei si folosind 4 iteratii.
Pas0: Pentru ca f(1)*f(2)<0, in intervalul (1,2) se gaseste cel putin o radacina reala. Se imparte intervalul
in subintervalele (1,3/2) si (3/2,2) si se calculeaza produsele f(1)*f(3/2)=0.25 si f(3/2)*f(2)=-0.5
Pas1: ⇒ c1=3/2 si ca radacina se gaseste in intervalul (3/2,2) care se imparte la randul sau in doua
subintervale (3/2,1.75) si (1.75,2); se calculeaza produsele f(3/2)*f(1.75)= -0.20117 si f(1.75)*f(2)=
6.4375
Pas2: ⇒ c2=1.75 si ca radacina se gaseste in intervalul (3/2,1.75) care se imparte la randul sau in doua
subintervale (3/2, 1.6250) si (1.6250,1.75); se calculeaza produsele f(3/2)*f(1.625)= -0.083252 si
f(1.625)*f(1.75)= 1.0719
Pas3: ⇒ c3=1.625 ca radacina se gaseste in intervalul (3/2, 1.6250) care se imparte in doua subintervale
(3/2, 1.5625) si (1.5625, 1.625); se calculeaza produsele f(3/2)*f(1.5625)= -0.031525 si f(1.5625)*f(1.
625)= 0.16797
Pas4: ⇒ c4=1.5625 si ca radacina se gaseste in intervalul (3/2, 1. 5625)
Se repeta rationamentul pana cand . . . . . . . . . . . . . . . . . . . . . → x=1.5214
Aceiasi problema cu folosirea functiei Octave bisectie (impunem o eroare absoluta de 0.0001 si maximum
100 de iteratii).
Program Octave pentru problema din Exemplul 1
octave#1> function y=f(x), y=x.^3-x-3; endfunction
octave#2> [radacina,eabsoluta,valoare]=bisectie("f",1,2,0.0001,100)
Rezulta: radacina = 1.5214, eabsoluta = 6.1035e-05, valoare = 1.4649e-06

4.1.2. METODA SECANTEI


Fie funcţia continuă f : [a,b] → R şi ecuaţia f(x) = 0, algebrică sau transcendentă. Se admite

ipoteza f (a ) f (b ) ≤ 0 şi, în acest caz, f(x) are pe [a,b] un număr impar de rădăcini reale (cel puţin una).

Principiul metodei : . Algoritmul de calcul iterativ este următorul (presupunem ca functia este convexa):
Pas 1: Se scrie ecuatia dreptei AB, unde A(a,f(a)) si B(b,f(b)) si se intersecteaza AB cu axa Ox . Fie C1(c1 ,0)
punctul de intersectie. Se calculeaza f(c1). Daca f(c1)=0, c1 este radacina cautata, daca f(c1)≠0 atunci
se calculeaza produsele f(a)* f(c1) si f(b)* f(c1) si se pastreaza pentru calculele urmatoare acel interval
(a, c1) sau (c1,b) pentru care produsul functiei la capete este negativ; presupunem ca acel interval este
(a, c1).
Pas 2: Se scrie ecuatia dreptei AB1, unde A(a,f(a)) si B1(c1, f(c1)) si se intersecteaza AB1 cu axa Ox . Fie
C2(c2 ,0) punctul de intersectie. Se calculeaza f(c2). Daca f(c2)=0, c2 este radacina cautata, daca f(c2)≠0
atunci se calculeaza produsele f(a)* f(c2) si f(c2)* f(c1) si se pastreaza pentru calculele urmatoare acel
interval (a, c2) sau (c2, c1) pentru care produsul functiei la capete este negativ;
Pas 3: Se continua procedeul si se obtine sirul c1, c2, . . ., cn , . . pana cand | ck+1- ck|≤εx sau |f(ck)| ≤εf
unde k specifică ordinul iteraţiei, iar εx este abaterea impusă asupra diferenţei soluţiilor aproximative
din sirul solutiilor la două iteraţii succesive (k-1) şi k. Erorile admisibile εf şi/sau εx sunt impuse de
către utilizator !
Functie Octave pentru implementarea metodei secantei

octave#1> function [radacina,eabsoluta,k,valoare]=secanta(f,p0,p1,delta,epsilon,max)


# f=numele functiei; [p0,p1]=intervalul radacinii; delta=eroare absoluta admisa; epsilon=eroare
# admisa pentru functie; max=nr. iteratii
for k=1:max
p2=p1-feval("f",p1)*(p1-p0)/(feval("f",p1)-feval("f",p0));
eabsoluta=abs(p2-p1);
p0=p1;
p1=p2;
radacina=p1;
valoare=feval("f",p1);
if (eabsoluta<delta)|(abs(valoare)<epsilon),break,endif
endfor
endfunction

Exemplul 2. Sa se determine radacina reala a ecuatiei x^3-x-2=0, situata in intervalul (1,2) folosind
metoda secantei si 2 iteratii.
Pas0: Pentru ca f(1)*f(2)<0, in intervalul (1,2) se scrie ecuatia dreptei care trece prin punctele A(1,-2) si
B(2,4) (y+2)/(4+2)=(x-1)/(2-1) si se intersecteaza cu axa Ox ;se obtine x=4/3
Pas1: ⇒ c1=4/3 ; se calculeaza produsele f(1)*f(4/3)= 1.9259 si f(4/3)*f(2)= -3.8519; rezulta ca radacina
se gaseste in intervalul (4/3,2); se scrie ecuatia dreptei care trece prin punctele A1=(4/3, -0.96296) si
B(2,4): (y+0.96296)/(4+0.96296)=(x-4/3)/(2-4/3) si se intersecteaza cu axa Ox ;se obtine x=1.6244
Pas2: ⇒ c1=1.6244 ; se calculeaza produsele f(4/3)*f(1.6244)= -0.63720 si f(1.6244)*f(2)= 2.6475;
rezulta ca radacina se gaseste in intervalul (4/3, 1.6244); se scrie ecuatia dreptei care trece prin punctele
A1=(4/3, -0.96296) si B1(1.6244, 0.66186): (y+0.96296)/(0.66186+0.96296)=(x-4/3)/(1.6244-4/3) si
se intersecteaza cu axa Ox ;se obtine x=1.5058
Se repeta rationamentul pana cand . . . . . . . . . . . . . . . . . . . . . → x=1.5214
Aceiasi problema cu folosirea functiei Octave secanta (impunem o eroare absoluta de 0.0001 si maximum
100 de iteratii).
Program Octave pentru problema din Exemplul 1
octave#1> function y=f(x), y=x.^3-x-3; endfunction
octave#2> [radacina,eabsoluta,k,valoare]=secanta("f",1,2,0.0001,0.0001,100)
Rezulta: radacina = 1.5214, eabsoluta = 0.00011099, k = 5, valoare =-2.5467e-06

4.1.3. METODA SUBSTITUŢIILOR SUCCESIVE


Se presupune că ecuaţia algebrică sau transcendentă f(x) = 0 are o singură rădăcină reală, δ, în
intervalul [a,b]. Se aduce ecuaţia la forma echivalentă: f (x ) + x − x = 0 şi dacă se notează:

F (x ) = f (x ) + x , (7.3)

ecuaţia iniţială devine: x = F (x ) . (7.4)


Bineînţeles că ecuaţia iniţială poate fi adusă la forma (7.4) şi prin alte artificii de calcul. În orice caz, se

constată că dacă δ este rădăcina ecuaţiei iniţiale, adică f(δ) = 0, atunci aceasta va fi rădăcină şi pentru
ecuaţia (7.4), adică δ = F(δ). Fie x0∈[a,b] o valoare iniţială, aproximativă, pentru rădăcina exactă δ.
Metoda iterativă se defineşte prin şirul de iteraţii succesive:

x1 = F ( x0 ), x 2 = F ( x1 ), K , xk +1 = F ( x k ) . (7.5)

Condiţia de convergenţă: Presupunând că F(x) este derivabilă pe [a,b], şirul de iteraţii succesive

(7.5) converge către δ dacă:

F ′ (x ) ≤ λ < 1 , ∀ x ∈ [a, b] . (7.6)

Dacă λ> 1, respectiv F ′ (x ) > 1 , şirul iterativ (7.5) diverge. Gradul de convergenţă al metodei este

linear, deci eroarea de la iteraţia (k+1) este proporţională cu eroarea de la iteraţia k.

Dacă δ = F(δ), atunci este valabilă şi relaţia: δ = (1 − α ) δ + α F (δ ) , unde α < 1, care

sugerează următoarea formulă iterativă:

xk +1 = (1 − α ) x k + α F ( x k ) = ϕ(x k ) . (7.7)

În acest caz, condiţia de convergenţă: ϕ′( x ) < 1 este echivalentă cu:

1 − α + α F ′( x ) < 1 , pentru x∈[a,b]. (7.8)

Inegalitatea (7.8) permite alegerea coeficientului subunitar α, care asigură convergenţa metodei. Se

observă că pentru α = 1, formula (7.7) se reduce la (7.5).

Functie Octave pentru implementarea metodei aproximatiilor succesive

octave#1> function [k,p,err,P] = aproximatie(g,p0,tol,max)


P(1)= p0;
for k=2:max1
P(k)=feval("g",P(k-1));
err=abs(P(k)-P(k-1));
relerr=err/(abs(P(k))+eps);
p=P(k);
if (err<tol) | (relerr<tol),break;endif
endfor
P=P';
endfunction

Exemplul 3. Sa se rezolve ecuatia f(x)=0 unde f(x)=-x^2/4+1 folosind metoda aproximatiilor succesive cu
3 pasi de iteratie si valoarea de start a solutiei egala cu x0=1;
Pas0: Se verifica ca in jurul valorii de start |F’(x)|<λ<1 si se construieste functia auxiliara
F(x)= -x^2/4+x+1 si se rezolva ecuatia x=F(x) folosind schema
iterativa xk=F(x(k-1)) cu k=1,2,3, . . .
Pas1: x1=F(1)= 1.75
Pas2: x2=F(1.75)= 1.9844
Pas3: x3=F(1.9844)= 1.9999
Program Octave:
[k,p,err,P]=fixpt("F",4,0.0001,100)
Rezulta: k = 5, p = 2.0000, err = 6.1034e-05
P = 4.0000 1.7500 1.9844 1.9999 2.0000

4.2. METODE CU PROPRIETĂŢI DE CONVERGENŢĂ PĂTRATICĂ


4.2.1. METODA LUI NEWTON
(METODA NEWTON-RAPHSON, SAU METODA TANGENTEI)

Această metodă este cel mai frecvent utilizată pentru determinarea aproximativă a soluţiei unei
ecuaţii algebrice sau transcendente de forma f(x) = 0. Se admite că f(x) = 0 are în intervalul [a,b] o

singură rădăcină reală δ. În plus, se acceptă că derivatele f ′(x ) şi f ′′( x ) sunt funcţii continue şi

păstrează semn constant pe intervalul [a,b]. Formula iterativă a lui Newton este:

f (xk )
x k +1 = x k − , unde k = 0, 1, 2,K, n,K (7.9)
f ′( x k )
În cadrul metodei lui Newton, condiţia alegerii punctului de pornire x0 este următoarea:

f ( x0 ) f ′′( x0 ) > 0 , (7.10)

aceasta asigurând apartenenţa x1∈[a,b].


Metoda lui Newton se aplică iterativ până la îndeplinirea condiţiei:

x k +1 − x k ≤ ε x , (7.11)

unde εx este o eroarea admisibilă impusă de către utilizator.

Din punct de vedere grafic, această metodă poate fi descrisă astfel: plecând din punctul de

coordonate {xk , f (xk )}, se trasează o tangentă la curba f(x), panta tangentei fiind f ′( xk ) . Această

tangentă intersectează axa Ox în xk +1 care în mod uzual reprezintă o estimare îmbunătăţită a rădăcinii

faţă de estimarea precedentă xk . Procedeul se repetă plecând din punctul definit de coordonatele

{xk +1 , f (xk +1 )} .
Metoda lui Newton este mai rapid convergentă decât metoda substituţiilor succesive. Din acest
motiv, metoda lui Newton este preferată altor metode numerice de rezolvare a ecuaţiilor algebrice şi
transcendente, cu condiţia ca forma funcţiei f(x) să fie precizată analitic, iar derivata ei să nu fie prea
complicată.
Functie Octave pentru implementarea metodei Newton

octave#1> function [p0,err,k,y]=newton(f,df,p0,delta,epsilon,max)


for k=1:max
p1=p0-f(p0)/df(p0);
err=abs(p1-p0);
relerr=2*err/(abs(p1)+delta);
p0=p1;
y=f(p0);
if (err<delta)|(relerr<delta)|(abs(y)<epsilon),break,endif
endfor
endfunction

Exemplul 4. Sa se determine radacina reala a ecuatiei f(x)=x^3-x-2=0, situata in intervalul (1,2) folosind
metoda lui Newton si 3 iteratii si valoarea de start x1=2
Pentru ca f(1)*f(2)<0, in intervalul (1,2) se calculeaza f’(x)=3*x^2-1 si construiste schema iterativa
xk+1=xk-f(xk)/f’(xk) cu k=1,2,3, . . .
Aceiasi problema cu folosirea functiei Octave newton (impunem o eroare absoluta de 0.00001 si maximum
50 de iteratii).
Program Octave pentru problema din Exemplul 1
octave#1> function y=f(x), y=x.^3-x-3; endfunction
octave#2> function y=df(x), y=3*x.^2-1; endfunction
octave#3> [p0,err,k,y]=newton("f","df",2,0.00001,0.0000001,50)
Rezulta: p0 = 1.5214, err = 2.6881e-06, k = 4, y = 3.6239e-11
4.2.2. METODA LUI NEWTON PENTRU DETERMINAREA RĂDĂCINII
UNEI ECUAŢII DE VARIABILĂ COMPLEXĂ
Fie ecuaţia:

f ( z ) = u ( x , y ) + i v ( x, y ) = 0 , (7.12)

de variabilă complexă z = (x + i y ) , unde funcţiile u(x,y) şi v(x,y) sunt precizate şi reprezintă partea

reală, respectiv partea imaginară a funcţiei complexe f(z).


Expresia (7.9) se poate generaliza pentru cazul complex, prin următoarele două relaţii:

⎡⎛ ∂u ∂u ⎞ ⎛ ⎛ ∂u ⎞ 2 ⎛ ∂u ⎞ 2 ⎞⎤
x k +1 = x k + ⎢⎜⎜ v − u ⎟⎟ ⎜ ⎜ ⎟ + ⎜ ⎟ ⎟⎥ , pentru k = 0, 1, 2, K, n, K
⎢⎝ ∂y ∂x ⎠ ⎜ ⎝ ∂x ⎠ ⎜ ∂y ⎟ ⎟⎥
⎣ ⎝ ⎝ ⎠ ⎠⎦ ( xk , yk )

⎡⎛ ∂u ∂u ⎞ ⎛ ⎛ ∂u ⎞ 2 ⎛ ∂u ⎞ 2 ⎞⎤
y k +1 = y k + ⎢⎜⎜ − v − u ⎟⎟ ⎜ ⎜ ⎟ + ⎜ ⎟ ⎟⎥ , (7.13)
⎢⎝ ∂x ∂y ⎠ ⎜ ⎝ ∂x ⎠ ⎜ ∂y ⎟ ⎟⎥
⎣ ⎝ ⎝ ⎠ ⎠⎦
( xk , yk )
unde expresiile funcţiilor u = u (xk , y k ) şi v = v( x k , y k ) , respectiv ale derivatelor ∂u/∂x şi ∂u/∂y, din
parantezele drepte, se evaluează pentru xk şi yk. Relaţiile (7.13) sunt formulele lui Newton pentru cazul

ecuaţiilor de variabilă complexă şi permit determinarea rădăcinii z k = (xk + i y k ) .


Calculul iterativ continuă până la îndeplinirea simultană a condiţiilor:

x k +1 − x k ≤ ε x şi y k +1 − y k ≤ ε y (7.14)

unde εx şi εy sunt erorile admisibile impuse de către utilizator (aceste erori admisibile se pot alege egale).
Functii Octave pentru rezolvarea ecuatiilor algebrice si transcendente

⇒ v= roots(p) .Rezolvarea ecuatiilor polinomiale de tip p(x)=a0*x^n+a1*x^(n-1)+…+an-1*x+an.


Intrari: p=vectorul care contine coeficientii functiei polinomiale .Iesiri: v=vectorul care contine
radacinile ecuatiei polinomiale P(x)=0
------------------------------------------------------------------------------------------------------------------
⇒ [x, fx, info] = fzero (fcn, approx, options)
⇒ fcn(x,p1,p2,...).
Brent, R. P. "Algorithms for minimization without derivatives" (1971)
------------------------------------------------------------------------------------------------------------------
⇒ [x, info, msg] = fsolve (fcn, x0)
Calculeaza solutia ecuatiei algebrice sau transcendente, pornind de la solutia de start x0. Remarcam
ca procesul iterativ de cautare a solutiei este sensibil la valoarea de start
Intrari: Daca fcn, contine numai numele functiei f(x) si x0 este valoarea de start a solutiei, fsolve ,
rezolva ecuatia /sistemul f(x) = 0. Daca fcn este un tablou de doua elemente, primul element este
numele functiei f iar al doilea element este jacobianul j(x)
df_i
jac(i,j) = ----
dx_j
De remarcat ca se poate folosi si functia fsolve_options care poate contine un set de parametrii
pentru fsolve
APLICAŢII DE LABORATOR

Problema 1. Să se găsească soluţia aproximativă a ecuaţiei x 2 − 4 x + 3 = 0 , pentru x ∈ [0; 2,5] , prin


metoda bisecţiei şi n = 4 paşi de algoritm. Să se compare rezultatul cu soluţia exactă δ= 1

Sa se determine radacinile ecuatiei folosind functia Octave roots


4
Problema 2. Aflaţi cu metoda bisecţiei valoarea lui 3 , cu 3 zecimale exacte pe intervalul [1, 2].
4
Sa se afle valoarea lui 3 , cu 6 zecimale exacte folosind functia Octave fzero
Problema 3. Să se analizeze şi să se rezolve ecuaţia f (x ) = x 3 − 3 x + 1 = 0 , folosind metoda

substituţiilor succesive, cele trei soluţii aflându-se în intervalele: δ 1 ∈ [− 2, - 1] , δ 2 ∈ [0, 1] şi

δ 3 ∈ [1, 2] . Sa se determine radacinile ecuatiei folosind functia Octave roots

Problema 4. Să se găsească soluţia ecuaţiei f ( x ) = x 3 − 3 x + 1 = 0 , pentru x ∈ [0, 1] , prin metoda lui


Newton, cu 4 zecimale exacte. Sa se determine radacinile ecuatiei folosind functia Octave roots

Să se găsească soluţia ecuaţiei f (x ) = x 3 − 3 x + 1 = 0 cu 8 zecimale exacte folosind functia Octave

fzero

Problema 5 .Găsiţi soluţia nenulă a ecuaţiei x = 1 − e −2 x , cu metoda lui Newton şi 4 zecimale exacte.
Sa se gaseasca de asemenea aceisi solutie cu 10 zecimale exacte folosind functia Octave fzero

Problema 6.Să se găsească soluţia ecuaţiei de variabilă complexă f ( z ) = z 2 − 2 z + 2 = 0 , cu metoda


lui Newton, plecând de la aproximaţia initială z0 = x0 + i y0 = 0,5 + i 0 ,75 .
Sa se verifice radacinile obtinute folosind functia Octave roots