Efectuat de : Bejan Mihai 
cl.XII-a A
Una dintre cele mai simple metode de determinare a 
unei soluţii a ecuaţiei f(x) = 0 este metoda bisecţiei. 
Fie data funcţia f(x), continuă pe segmentul [a, b] şi 
f(a)f(b)< 0. 
Se cere să se determine o soluţie a ecuaţiei f(x) =0 pe 
segmentul [a, b]. Proprietăţile funcţiei asigură existenta 
cel puţin a unei soluţii pe segmentul [a, b]. 
Metoda presupune determinarea punctului de mijloc 
c a segmentului [a, b] apoi calculul valorii f(c).
Daca f(c) = 0, atunci c este soluţia exactă a ecuaţiei. În caz contrar 
soluţia este căutată în continuare pe acel dintre segmentele [a, c] sau [c, 
b], pentru care semnul funcţiei în extremităţi este diferit. 
Daca f(a)f(c)>0, atunci soluţia e căutată în continuare pe segmentul 
[ai, bi] , unde a1= c, b1= b. În caz contrar extremităţile noului segment 
vor fi a1= a, b1= c. 
În urma iteraţiilor succesive se 
obţine consecutivitatea segmentelor 
[a0,b0], [a1,b1],..., [ai,bi],... 
Pentru fiecare din ele are loc relaţia 
f(ai)f(bi) < 0, i=0,1, 2,....
Algoritmul de calcul pentru un număr 
prestabilit n de aproximări succesive: 
Pas 0: Iniţializarea: i =0(din poze condiţia) 
Pas 1: Determinarea mijlocului segmentului a+b/2; 
Pas 2: Reducerea segmentului ce conţine soluţia: 
daca f(c) = 0 atunci soluţia calculată este x = c. 
SFARŞIT. 
În caz contrar daca f(a)f(c)>0, atunci a=c; b=b, 
altfel a=a; b = c. 
Pas 3: i=i+1; Daca i = n atunci soluţia calculata este 
x=a+b/2. SFARŞIT. în caz contrar se revine la 
Pasul 1.
program bisectie; 
var a,b,c:real;i,n,j:integer; 
function f(x:real):real; 
begin 
f:=x*x*x*x+2*x*sqr(x)-x-1; 
end; 
begin 
a:=0;b:=1; n:=16; 
i:=1; c:=a; 
while (i<=n) and (f(c)<>0) do 
begin 
c:=(a+b)/2; 
writeln('i=',i:3,' x=', c:10:8, ' f(x)=', f(c):10:8); 
if f(c)=0 then Writeln('solutia exacta') 
else if f(c)*f(a)>0 then a:=c else b:=c; 
inc(i); 
end; 
readln 
end.
Deoarece x e un punct al segmentului [ai, 
bi] rezultă că diferenţa dintre soluţia 
exactă şi cea calculată nu este mai mare 
decât lungimea segmentului [ai, bi]. 
Localizarea soluţiei pe un segment cu 
lungimea ε asigură o eroare ce nu 
depăşeşte lungimea ε a segmentului. 
i i i x - a < e = b - a
Algoritmul de calcul pentru 
o precizie ε data. 
Pas 1:Determinarea mijlocului segmentului 
(a+b)/2; 
Pas 2:Daca f(c) = 0 atunci soluţia calculată este 
x=c. SFARŞIT. 
În caz contrar daca f(a)f(c) > 0, atunci a= c; b= 
b, 
altfel a = a; b= c. 
Pas 3 :Daca lungimea intervaluluib |b-a|< ε, 
atunci solutia este x=(a+b)/2. 
SFARŞIT, în caz contrar se revine la Pas 1.
program bisectie; 
var a,b,c,e:real;i,n,j:integer; 
function f(x:real):real; 
begin 
f:=x*x*x*x+2*x*sqr(x)-x-1; 
end; 
begin 
a:=0;b:=1; 
i:=0;c:=a;e:=0.001; 
while (abs(b-a)>e) and (f(c)<>0) do 
begin 
c:=(a+b)/2; 
writeln('i=',i:3,' x=', c:10:8, ' f(x)=', f(c):10:8); 
if f(c)=0 then Writeln('solutia exacta') 
else if f(c)*f(a)>0 then a:=c else b:=c; 
inc(i); 
end; 
readln 
end.
Metoda bisecţiei este destul de clară sub aspect 
algoritmic şi sigură în aplicare:în cazul rădăcinilor 
simple ea generează şiruri convergente pentru orice 
funcţii continue, posedînd stabilitate la erori de 
rotunjire. 
Deşi viteza de convergenţă la aplicarea 
metodei este redusă(la execuţia unui pas precizia 
doar se dublează), în multe cazuri această metodă 
are o complexitate temporală acceptabilă în contex 
practic. Metoda dată nu poate fi aplicată în cazul 
rădăcinilor de multiplicitate pară.
Metoda bisecţiei

Metoda bisecţiei

  • 1.
    Efectuat de :Bejan Mihai cl.XII-a A
  • 2.
    Una dintre celemai simple metode de determinare a unei soluţii a ecuaţiei f(x) = 0 este metoda bisecţiei. Fie data funcţia f(x), continuă pe segmentul [a, b] şi f(a)f(b)< 0. Se cere să se determine o soluţie a ecuaţiei f(x) =0 pe segmentul [a, b]. Proprietăţile funcţiei asigură existenta cel puţin a unei soluţii pe segmentul [a, b]. Metoda presupune determinarea punctului de mijloc c a segmentului [a, b] apoi calculul valorii f(c).
  • 3.
    Daca f(c) =0, atunci c este soluţia exactă a ecuaţiei. În caz contrar soluţia este căutată în continuare pe acel dintre segmentele [a, c] sau [c, b], pentru care semnul funcţiei în extremităţi este diferit. Daca f(a)f(c)>0, atunci soluţia e căutată în continuare pe segmentul [ai, bi] , unde a1= c, b1= b. În caz contrar extremităţile noului segment vor fi a1= a, b1= c. În urma iteraţiilor succesive se obţine consecutivitatea segmentelor [a0,b0], [a1,b1],..., [ai,bi],... Pentru fiecare din ele are loc relaţia f(ai)f(bi) < 0, i=0,1, 2,....
  • 4.
    Algoritmul de calculpentru un număr prestabilit n de aproximări succesive: Pas 0: Iniţializarea: i =0(din poze condiţia) Pas 1: Determinarea mijlocului segmentului a+b/2; Pas 2: Reducerea segmentului ce conţine soluţia: daca f(c) = 0 atunci soluţia calculată este x = c. SFARŞIT. În caz contrar daca f(a)f(c)>0, atunci a=c; b=b, altfel a=a; b = c. Pas 3: i=i+1; Daca i = n atunci soluţia calculata este x=a+b/2. SFARŞIT. în caz contrar se revine la Pasul 1.
  • 5.
    program bisectie; vara,b,c:real;i,n,j:integer; function f(x:real):real; begin f:=x*x*x*x+2*x*sqr(x)-x-1; end; begin a:=0;b:=1; n:=16; i:=1; c:=a; while (i<=n) and (f(c)<>0) do begin c:=(a+b)/2; writeln('i=',i:3,' x=', c:10:8, ' f(x)=', f(c):10:8); if f(c)=0 then Writeln('solutia exacta') else if f(c)*f(a)>0 then a:=c else b:=c; inc(i); end; readln end.
  • 6.
    Deoarece x eun punct al segmentului [ai, bi] rezultă că diferenţa dintre soluţia exactă şi cea calculată nu este mai mare decât lungimea segmentului [ai, bi]. Localizarea soluţiei pe un segment cu lungimea ε asigură o eroare ce nu depăşeşte lungimea ε a segmentului. i i i x - a < e = b - a
  • 7.
    Algoritmul de calculpentru o precizie ε data. Pas 1:Determinarea mijlocului segmentului (a+b)/2; Pas 2:Daca f(c) = 0 atunci soluţia calculată este x=c. SFARŞIT. În caz contrar daca f(a)f(c) > 0, atunci a= c; b= b, altfel a = a; b= c. Pas 3 :Daca lungimea intervaluluib |b-a|< ε, atunci solutia este x=(a+b)/2. SFARŞIT, în caz contrar se revine la Pas 1.
  • 8.
    program bisectie; vara,b,c,e:real;i,n,j:integer; function f(x:real):real; begin f:=x*x*x*x+2*x*sqr(x)-x-1; end; begin a:=0;b:=1; i:=0;c:=a;e:=0.001; while (abs(b-a)>e) and (f(c)<>0) do begin c:=(a+b)/2; writeln('i=',i:3,' x=', c:10:8, ' f(x)=', f(c):10:8); if f(c)=0 then Writeln('solutia exacta') else if f(c)*f(a)>0 then a:=c else b:=c; inc(i); end; readln end.
  • 9.
    Metoda bisecţiei estedestul de clară sub aspect algoritmic şi sigură în aplicare:în cazul rădăcinilor simple ea generează şiruri convergente pentru orice funcţii continue, posedînd stabilitate la erori de rotunjire. Deşi viteza de convergenţă la aplicarea metodei este redusă(la execuţia unui pas precizia doar se dublează), în multe cazuri această metodă are o complexitate temporală acceptabilă în contex practic. Metoda dată nu poate fi aplicată în cazul rădăcinilor de multiplicitate pară.