Sunteți pe pagina 1din 13

Lucrare practic

La informatic

Tema : Elaborarea programelor de rezolvare a ecuaiilor


algebrice prin metoda biseciei i a coardelor .

A elaborat
Elevul(a) clasei a 12 A
Agachi Nichita

Chiinu 2014

Scopul lucrarii:

1.S separe toate rdcinele reale ale ecuaiilor


F(x)=0, unde y=F(x) funcie real cu valori reale.
2.S precizeze rdcina obinut cu exactitate
eps=0,00001, cu ajutorul metodei biseciei i a
coardelor.
3.Concluzia.

Ecuaiile: F1:= cos(x) +x+1=0


F2:= x*x*x -25*x+19=0

METODA BISECIEI
Una dintre cele mai simple metode de determinarea a unei soluiei
a ecuaiei f(x)=0 este metoda biseciei. Metoda presupune determinare

punctului de mijloc C al segmentului [a,b], apoi calculul valorii


f(c). Dc f(c)=0, atunci c este solutia exact a ecuatiei. In caz
contrar , solutia este cutat pe unul dintre segmente [a,c] i
[c,b].Ea va aparine segmentul pentru care semnul funciei in
extremitai este diferit

F1:= cos(x) +x+1=0


Program P1.1;
var a,b,c:real;
i,n:integer;
function f(x:real):real;
begin f:= cos(x) +x+1;end;
begin
a:=0;b:=1;n:=8;
for i:=1 to n do
begin c:=(b+a)/2;
writeln(`i=`, i:3,`x=`, c:10:8,`f(x)=` , f(c):12:8);
if f(c)=0 then break
else if f(c)*f(a)>0 then a:=c else b:=c;
end;
end.
foaia neagr:

x=0.50000000
x=0.75000000
x=0.87500000
x=0.93750000
x=0.96875000
x=0.98437500
x=0.99218750
x=0.99609375

f(x)=
f(x)=
f(x)=
f(x)=
f(x)=
f(x)=
f(x)=
f(x)=

2.37758256
2.48168887
2.51599686
2.52930508
2.53508020
2.53775880
2.53904724
2.53967892

Program P1.2
var a,b,c,eps:real;
function f(x:real) :real;
begin f:= cos(x) +x+1;end;
begin a:=2; b:=4; eps:= 0,00001;
repeat
c:=(b+a)/2;
writeln (`i=`, i:3,` x=` ,c:10:8,` f(x)=` ,f(c):12:8);
if f(c)=0 then break
else if f(c)*f(a)>0 then a:=c else b:=c;
until abs (b-a)<eps;

end.
foaia neagr:

x=3.00000000 f(x)=
x=3.50000000 f(x)=
x=3.75000000 f(x)=
x=3.87500000 f(x)=
x=3.93750000 f(x)=
x=3.96875000 f(x)=
x=3.98437500 f(x)=
x=3.99218750 f(x)=

3.01000750
3.56354331
3.92944064
4.13210217
4.23786324
4.29177929
4.31898661
4.33265137

F2:= x*x*x -25*x+19=0


Program P2.1;
Var a,b,c:real;
i,n:integer;
function f(x:real):real;
begin f:= x*x*x -25*x+19;end;
begin
a:=0;b:=1;n:=2;
for i:=1 to ndo
begin c:=(b+a)/2;
writeln (`i=`, i:3,` x=` ,c:10:8,` f(x)=` ,f(c):12:8);
if f(c)=0 then break
else if f(c)*f(a)>0 then a:=c else b:=c;
end;
end.

foaia negr:
x=0.50000000
x=0.75000000
x=0.87500000
x=0.81250000
x=0.78125000
x=0.76562500
x=0.77343750
x=0.77734375

f(x)= 6.62500000
f(x)= 0.67187500
f(x)= -2.20507813
f(x)= -0.77612305
f(x)= -0.05441284
f(x)= 0.30817032
f(x)= 0.12673712
f(x)= 0.03612655

Program P2.2
var a,b,c,eps:real;
function f(x:real) :real;
begin f:= x*x*x -25*x+19;end;
begin a:=2; b:=4; eps:= 0,00001;
repeat
c:=(b+a)/2;
writeln (`i=`, i:3,` x=` ,c:10:8,` f(x)=` ,f(c):12:8);
if f(c)=0 then break
else if f(c)*f(a)>0 then a:=c else b:=c;
until abs (b-a)<eps;

end.

foaia neagr:

x=0.50000000 f(x)= 6.62500000


x=0.75000000 f(x)= 0.67187500
x=0.87500000 f(x)= -2.20507813
x=0.81250000 f(x)= -0.77612305
x=0.78125000 f(x)= -0.05441284
x=0.76562500 f(x)= 0.30817032
x=0.77343750 f(x)= 0.12673712
x=0.77734375 f(x)= 0.03612655

Metoda coardelor
Metoda coardelor const in divizarea segmentului in pri proporionale,
proporia fiind dat de punctul de intersecie al coardei care unete
extremitile segmentului cu axa Ox. Aceasta metoda presupune alegerea in
calitate de aproximare a soluiei punctul determinat de interesecia dreptei
ce trece prin punctele (a,f(a)) si (b,f(b)) cu axa Ox. Pentru realizarea
metodei se stabilete extremitatea e a segmentului [a,b] prin care se va
duce o serie de coarde .Aceasta extremitate este determinat de condiia :
f(e)*f(e)>0.
Cealalt extremitate a segmentului [a,b] se consider aproximarea iniial
asoluiei.

F1:= cos(x) +x+1=0

Program P3.1;
var a,b,c,e,x:real;
i,n:integer;
function f(x:real):real;
begin f:= cos(x) +x+1;end;
begin a:=1;b:= 5;n:= 8;
{determinarea extremitatii fixe e si a aproximarii initiale x0}
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;
{calculul iterativ al solutiei}
For i:=1 to n do
begin x:= (x-f(x))/(f(e)-f(x))*(e-x);
writeln (x:10:8,` `,f(x):12:8);
end;
end.

foaia negr:
x=-1.37166848 f(x)= -0.17385399
x=-1.04666739 f(x)= 0.45379168
x=-1.47180685 f(x)= -0.37297896
x=-0.93231310 f(x)= 0.66366505
x=-1.64332744 f(x)= -0.71579498
x=-0.75297873 f(x)= 0.97667647
x=-1.93911403 f(x)= -1.29916050
x=-0.48988530 f(x)= 1.39250153

Program P3.2

Var
Msup, minf, a,b,e,x,xnou,xvechi,eps:real;
Function f(x:real):real;
begin f:= cos(x) +x+1;
end;
begin a:=- 0.5; b:= 0.5; eps: =0. 00001;
Msup: =10; minf:= 5;
{determinarea extremitatii fixe e si a aproximarii initiale}
x:=a-(f(a))/(f(b)-f(a))*(b-a);
If f(x)*f(a)>0 then begin e:=b ; xnou:=a; end
Else begin e:=a; xnou:=b; end;
{calculul iterativ al solutiei}

Repeat
xvechi:= xnou;
Xnou:=xvechi-(f(xvechi))/(f(e)-f(xvechi))*(e-xvechi);
Writeln('x=', xnou:10:8,'f(x)=',f(xnou):12:8);
Until abs((Msup-minf)/minf*(xnou-xvechi))<eps;
End.
foaia negr:
x=-1.87758256
x=-1.24212506
x=-1.28828072
x=-1.28287717
x=-1.28349169
x=-1.28342156
x=-1.28342956

f(x)= -1.17957905
f(x)= 0.08066065
f(x)= -0.00950831
f(x)= 0.00108049
f(x)= -0.00012331
f(x)= 0.00001407
f(x)= -0.00000160

F2:= x*x*x-25*x+19=0

Program P4.1;
Var a,b,e,c,x: real ;
n,i :integer;
function f(x:real ):real;

begin f:= x*x*x-25*x+19;end;


begin a:=1;b:= 5;n:=8;
{determinarea extremitatii fixe e si a aproximarii initiale x0}
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;
{calculul iterativ al solutiei}
For i:=1 to n do
begin x:= (x-f(x))/(f(e)-f(x))*(e-x);
writeln (x:10:8,` `,f(x):12:8);
end; end.

foaia negr:
x=1.00000000
x=1.00000000
x=1.00000000
x=1.00000000
x=1.00000000
x=1.00000000
x=1.00000000
x=1.00000000

Program P4.2

f(x)= -5.00000000
f(x)= -5.00000000
f(x)= -5.00000000
f(x)= -5.00000000
f(x)= -5.00000000
f(x)= -5.00000000
f(x)= -5.00000000
f(x)= -5.00000000

Var
Msup, minf, a, b, e, x, xnou, xvechi, eps:real;
Function f(x:real):real;
begin f:= cos(x) +x+1;
end;
begin a:=- 0.5; b:= 0.5; eps: =0. 00001;
Msup: =10; minf:= 5;
{determinarea extremitatii fixe e si a aproximarii initiale}
x:=a-(f(a))/(f(b)-f(a))*(b-a);
If f(x)*f(a)>0 then begin e:=b ; xnou:=a; end
Else begin e:=a; xnou:=b; end;
{calculul iterativ al solutiei}

Repeat
xvechi:= xnou;
Xnou:=xvechi-(f(xvechi))/(f(e)-f(xvechi))*(e-xvechi);
Writeln('x=', xnou:10:8,'f(x)=',f(xnou):12:8);
Until abs((Msup-minf)/minf*(xnou-xvechi))<eps;
End.

foaia negr:

x=0.76767677
x=0.77863255
x=0.77889552
x=0.77890188

f(x)=
f(x)=
f(x)=
f(x)=

0.26049393
0.00624664
0.00015090
0.00000365

Concluzia:
n urma nfaptuirii acestei lucrri practice am analizat metoda
Biseciei i metoda Coardelor folosind Turbo Pascal.Am studiat
modul de cautare i afiare s fiecarei metode,observnd asemeneai
deosebirea acestora.Asemnarea const n restrngerea domeniului
de definiie,astfel ncit funcia s aib rdcina n noul bomeniu de
definiiei rezultatele sunt aproximativ identice.
Faptul ca irul aproximrilor succesive prin metoda Coardelor
converge ctre soluia exact implic urmtoarea concluzie:eroarea
soluiei calculate va fi invers proporional cunumarul de iteraii
efectuate.
Metoda Biseciei este una dintre cele mai sinmple metode de
determinare a unei soluii a ecuaiei F(x)=0,ea pesupune
determinarea punctului de mujloc(c) alunui segment([a,b]), apoi
calculul valorii funciei n acest punct(F(c)).

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