Documente Academic
Documente Profesional
Documente Cultură
Vom defini trei şiruri (an), (bn), (cn), n>=0 în felul următor:
ao=a, bo=b, co=(ao+bo) / 2
Dacă f(co)=0, atunci co- soluţie
altfel
Dacă f(co)< 0 atunci a1=co; b1= bo, iar c1=(a1+b1) / 2
altfel a1=ao; b1= co, iar c1=(a1+b1) / 2;
ş.a.m.d
Ilustrarea grafică:
Pagina 1 din 6
Seminarul republican al profesorilor de informatică
Raisa Miron, grad didactic superior
Din construcţia şirurilor avem că cn=(an+bn) / 2, an- cn <0, bn - cn >0
Deci: pentru a găsi soluţia ecuaţiei f(x) =0 pe intervalul [a, b], calculăm termenii şirului (cn) şi limita
acestui şir este soluţia ecuaţiei pe [a, b].
Problemă:
cum se determină limita şirului (cn) şi cât de repede converge şirul (cn) la A.
Mai precis, fiind dat un > 0, cîţi termeni consecutivi ai şirului trebuie calculaţi pentru a obţine un
n astfel încât:
cn A ?
Din păcate însă A e necunoscut, şi cum să-l determinăm pe n?
Există două modalităţi de aflare aproximativă a soluţiei A cu exactitatea
1. Estimarea apriori a erorii;
2. Estimarea aposteriori a erorii.
Pagina 2 din 6
Seminarul republican al profesorilor de informatică
Raisa Miron, grad didactic superior
2n 1 ba ba ba
2n n ln(2) > ln ( ) n > ln ( ) / ln(2)
ba n
Aşa dar: pentru a calcula soluţia ecuaţiei f(x)=0, cu exactitatea vom calcula toţi termenii consecutivi
ai şirului cn pâna când
2 * c n c n 1
Exempu 1:
Să se rezolve ecuaţia x3+x2-1=0, pe intervalul [-3, 3]
(Răspuns: x0.7548776663, =0.0001)
Rezolvare:
Fie f(x)= x3+x2-1 f – este o funcţie continuă pe R
f(-3) = -27+9-1 = -19
f(3) = 27 +9 -1 = 35 putem aplica metoda bisecţiei
f:=sqr(x)*x+sqr(x)-1;
end;
begin clrscr;
a:=-3; b:=3;
writeln('Introduceti exactitatea:');
readln(eps);
n:=trunc(ln((b-a)/eps)/ln(2))+1; u:=true;
for i:=1 to n do begin
c:=(a+b)/2;
if f(c)=0 then begin
writeln(c:10:6,'-solutia exacta a ecuatiei');
u:=false; break; end
else
if f(a)*f(c)>0 then a:=c
else b:=c;
end;
if u then writeln(c:15:10,'-solutia aproximativa a ecuatiei');
readln;
end.
Rezultatul: exactitatea 0.000001 x0.7548773289
Estimarea aposteriori:
program prob1_metoda_bisectiei_aposteriori;
uses crt;
var a,b,c,c1,eps: real; u:boolean;
function f(x:real):real;
begin
f:=sqr(x)*x+sqr(x)-1;
end;
begin clrscr;
a:=-3; b:=3;
writeln('Introduceti exactitatea:');
readln(eps);
c:=a; u:=true;
repeat c1:=c;
c:=(a+b)/2;
if f(c)=0 then begin
writeln(c:10:6,'-solutia exacta a ecuatiei');
u:=false; break; end
else
if f(a)*f(c)>0 then a:=c
else b:=c;
until 2*abs(c-c1)<eps;
if u then writeln(c:15:10,'-solutia aproximativa a ecuatiei');
readln;
end.
Rezultatul: exactitatea 0.000001 x0.7548776865
Pagina 4 din 6
Seminarul republican al profesorilor de informatică
Raisa Miron, grad didactic superior
În caz cînd nu se cercetează funcţia matematic şi capetele intervalullui se citesc cu ajutorul procedurii
read, programul trebuie să verifice, dacă poate fi aplicată metoda bisecţiei sau nu si să cerceteze toate
cazurile posibile:
Exemplu 2
3x2+11x+1=0, pe [a, b]
program prob2_metoda_bisectiei_apriori;
uses crt;
var a,b,c,eps: real; i, n: integer;
u:boolean;
function f(x:real):real;
begin
f:=3*sqr(x)+11*x+1;
end;
begin clrscr;
write('a='); readln(a);
write('b='); readln(b);
if f(a)=0 then writeln(a:12:10,'-solutia exacta')
else if f(b)=0 then
writeln(b:12:10,'-solutia exacta')
else
if f(a)*f(b)<0 then begin
writeln('Introduceti exactitatea:');
readln(eps); u:=true;
n:=trunc(ln((b-a)/eps)/ln(2))+1;
for i:=1 to n do begin
c:=(a+b)/2;
if f(c)=0 then begin
writeln(c:10:6,'-solutia exacta ');
u:=false;
break; end
else
if f(a)*f(c)<0 then b:=c
else a:=c;
end;
if u then writeln(c:15:10,'-solutia aproximativa ');
end
else
writeln('nu putem aplica metoda bisectiei');
readln;
end.
Literatură:
Pagina 6 din 6