Metoda bisectiei
Fie functia f(x) este continua pe [a,b],radacina X a ecuatiei f(x)=0 este izolata pe acest
interval,iar
b-a>2 *ε ,unde ε este un numar pozitiv suficient de mic ( ε =0.01) . Elaboram
algoritmul de calcul al radacinii X cu precizia data ε ,utilizind metoda injumatatirii
intervalului.
ALGORITM
Pasul(1) Divizam intervalul [a,b] in doua jumatati prin punctul c=(a+b)/2
Pasul(2) Calculam valoarea f(c). Daca f(c)=0, atunci c este valoarea exacta a
radacinii si procesul de calcul se stopeaza.
.
. Altfel , daca f(c)<>0,din cele doua jumatati [a,b] si
[a,c] o alegempe aceea ,la ale carei extremitati functia are valori de semne opuse pe
care il renotam [a1,b1].
Fig. 1. Calculul
consecutiv al
segmentelor, care
conţin soluţia ec
Estimarea erorii. 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]. Prin urmare, localizarea soluţiei pe un segment cu lungimea ε asigură o eroare
ce nu depăşeşte lungimea ε a segmentului.
-5 -4 -3 -2 -1 0 1 2 3 4 5
- - - - - + + + + + +
Program P332;
Uses crt;
Function F (x:real):real;
Begin F: =x*x*x+4*x+2; end;
Function Bisect (a,b,Eps: real; afis:boolean;
Var nv,n:byte): real;
Var c,Fa,Fc:real
Begin
n: = Trunc (Ln ((b-a)/eps)/Ln(2)); Fa: =f(a);
Repeat
c: =(a+b)/2; Fc: =f(c);
If afis then writeln (`x=`, c:0:nc, ` f(x) =`, Fc:0:nc);
If Fc <> 0 then If Fa*Fc< 0 then b: =c
else begin a: =c; Fa: =Fc; writeln (c:7:5,’ ’ ,f(c):0:5);
End;
Writeln (c, ` `,f(c) );
Until (abs (b-a)< =2* Eps) or (Fc=0);
If Fc <> 0 then c: = (a+b)/2;
Bisect: =c;
End;
Procedure Rezolvare (a,b,eps: Real; nc, k: byte);
Var x:real; n:byte;
Begin If f(a)*f(b) <0 Then begin
x: =Bisect (a, b, Eps, false, nc, n);
writeln (`x`, k `=`, x:0:nc, ` f(x`, k,`) =`, f(x):0:nc);
writeln (`n`,k, `=`,n);
End
Else Writeln (`Nu este izolată rădăcina`,k);
End;
Begin ClrScr; Rezolvare (-1,0, 0.01, 5,1);
Readln;
End.
x−a y − f (a )
=
b − a f (b) − f ( a)
Intersectând această dreaptă cu dreapta y=0 vom obţine
sau, notând
f (a) f (a)
x1 = a − ( b − a) h1 = − ( b − a)
f (b) − f ( a) f (b) − f (a )
x1=a+h1
f (b)
x1 = b − (b − a )
f (b ) − f ( a )
Procedând analog se va obţine, pe rând
f ( a)
x2 = x1 − (x1 − a )
f ( x1 ) − f ( a)
f (a)
x3 = x2 − (x 2 − a )
f ( x2 ) − f ( a )
...
f (a )
xn = xn −1 − (xn −1 − a )
f ( xn −1 ) − f (a )
Program COARDA;
uses crt;
var a,b,c,e,x: real;
n,i: integer;
Function f(x:real):real;
begin
f:= x*x*x+4*x+2;
end;
begin clrscr;
a:=-1; b: =0; n=6;
c: =a-(f(a))/(f(b)-f(a))*(b-a);
if f(c)*f(a) >0 then begin e:=b; x:=a; end;
else begin e:=a; x:=b; end;
for i:=1 to n begin
x:=x-(f(x))/(f(e)-f(x))*(e-x);
writeln (`x=`, x:7:5,`f(x) =`, f(x):7:5); end;
readln
end.
Intrare
f(x)=x-4x+1
Ieşire
n x
0 -0.50000
1 -0.473684
2 -0.473465
Soluţiile
0.01+0.47346-=1 ﻉ
Lucrare de laborator
Tema: Rezolvarea ecuatiilor prin
metode numerice
Controlat Efecuat
Prof . T.Zatica elev Rusu Dorin
Grupa CBO703
Fie o ecuaţie neliniara sau trascendentă de forma f(x)=0 şi fie ca functia f(x)
are pe intervalul [a,b] o singură rădăcina reala, iar prima derivata f /(x) si cea a
două f //(x) sunt continuie şi nu menţin semnul constant în intervalul dat.
| xn –xn-1 | ≤ εad ,