Sunteți pe pagina 1din 9

1.

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].
Pasul(3) Daca b1-a1>2* ,repetam aceleasi rationamente pentru intervalul nou
[a1,b1].
Pasul(4) Prin renotare capatam [a2,b2] de lungimea (b-a)/4
Continuind procesul injumatatirii intervalului ,vom obtine fie ca la un anume pas
mijlocul intervalului va fi radacina ecuatiei,fie un sir de intervale incluse unul in
altul . Rezulta ca pentru calculul radacinii cu precizia ,procesul injumatatirii
intervalului trebuie continuat pina la prima valoare a lui n ,care satisface
inegalitatea
(b-a)/2 la puterea n<=2*
Adica
n= [ln((b-a)/E)/ln2].

Fig. 1. Calculul
consecutiv al
segmentelor, care
conin soluia ec

Estimarea erorii. Deoarece X e un punct al segmentului [ ai,bi] rezult c


diferena dintre soluia exact i cea calculat nu este mai mare dect lungimea
segmentului
[ai,bi]. Prin urmare, localizarea soluiei pe un segment cu lungimea asigur o eroare
ce nu depete lungimea a segmentului.

- ai < b ai

2. Determinm pe ce interval se afl soluiile ecuaiei x*x*x+4*x+2= 0


Pentru a determina pe ce interval se afl soluiile ecuaiei x*x*x+4*x+2=0 vom
utiliza metoda analitic de izolare a rdcinilor. n acest scop vom compune tabelul
semnelor valorilor f(x), utiliznd irul Rolle:
-5
-

-4
-

-3
-

-2
-

-1
-

0
+

1
+

2
+

3
+

4
+

5
+

3. Determinm rdcinile ecuaiei cu ajutorul limbajului Pascal.


Fie ecuaia x*x*x+4*x+2=0. Funcia f(x) este continu pe ntreaga ax numeric,
iar rdcinile ecuaiei date sunt izolate dup cum urmeaz:X1 [-1,0];
Aplicm programul de mai jos P10 la determinarea rdcinilor ecuaiei date cu
precizia eps = 0,01:
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 rdcina`,k);
End;
Begin ClrScr; Rezolvare (-1,0, 0.01, 5,1);
Readln;
End.

4. Aplicnd programul de mai sus P332 la determinarea rdcinilor ecuaiei


date cu precizia eps = 0,01, dup 6 iteraii, obinem:
-0.5000000+0000
-4.62500000000000E+0000
-0.47968421+0000
-1.39062500000000E+0000
-0.47846582 +0000
-9.57031250000000E-0002
-0.47646580+0000
4.76318359375000E-0001
-0.4765809+0000
1.96441650390625E-0001
-0.4765646 +0000
5.19142150878906E-0002
x1=-0,47656 f(x1)= -0.01448
n=6

5. Metoda coardei
Fie f:[a, b] R, continu pe intervalul (a, b), cu f(a)f(b)<0, deci are semne opuse
la capetele intervalului.
Pentru nceput vom presupune f(a)>0 i f(b)<0, adic:
y
A
f(a)

cnd f(a)>0
b
0

f(b)
B

f ''( x) 0, x (a, b)

"adun apa"

Ducem coarda AB.


tiind c ecuaia dreptei care trece prin dou puncte A(x1, y1) i B(x2, y2) este

y2 y1
( x x1 ) i c, n cazul nostru punctele sunt A(a, f(a)) i B(b,
x2 x1

y y1

f(b)), obinem

xa
y f (a )

b a f (b) f (a )

Intersectnd aceast dreapt cu dreapta y=0 vom obine


x1 a

f (a)
f (a )
(b a) sau, notnd h1
(b a )
f (b) f (a)
f (b) f (a)

x1=a+h1
Fcnd n relaia de mai sus +b -b se obine:
x1 b

f (b)
(b a )
f (b) f (a)

Procednd analog se va obine, pe rnd


f (a)
( x1 a )
f ( x1 ) f (a )
f (a)
x3 x2
( x2 a )
f ( x2 ) f (a)
x2 x1

...
f (a)
( xn 1 a )
f ( xn 1 ) f (a )
ab
deci pentru f(a)>0 i f ''(
) 0 a fix
2
ab
dac f (a) f ''(
) 0 b fix
2
xn xn 1

6. Determinm rdcinile ecuaiei cu ajutorul limbajului Pascal.


Fie ecuaia x*x*x+4*x+2=0. Funcia f(x) este continu pe ntreaga ax numeric, iar
rdcinile ecuaiei date sunt izolate dup cum urmeaz : 1 [-1,0];
Aplicm programul de mai jos COARDA la determinarea rdcinilor ecuaiei date cu
precizia eps = 0,01:
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.

7. Rezultatele furnizate de programul COARDA sunt urmtoarele:


Intrare
f(x)=x-4x+1
n
0
1
2
1=-0.47346+0.01

Ieire
x
-0.50000
-0.473684
-0.473465
Soluiile

Colegiul Financiar-Bancar A.Diordita

Lucrare de laborator
Tema: Rezolvarea ecuatiilor prin
metode numerice

Controlat
Prof . T.Zatica

Efecuat
elev Rusu Dorin
Grupa CBO703

8.Metoda tangentei (metoda Newton )


Fie o ecuaie neliniara sau trascendent de forma f(x)=0 i fie ca functia f(x)
are pe intervalul [a,b] o singur rdcina reala, iar prima derivata f /(x) si cea a
dou f //(x) sunt continuie i nu menin semnul constant n intervalul dat.
Metoda const in aproximarea rdcinii precise cu abscisa punctului de
intersecie a tangentei cu axa Ox, care este dus la curba f(x) in punctul k cu
coordonatele {xk ,f(xk)} alese n mod corespunztor.
Altfel spus, arcul de curb f(x) se inlocuiete cu o tangent la curba intr-un
punct k care se deplaseaza in direcia rdcini (fig 1):

Fig. 1. Schema obinerii soluiei prin metoda tangentei


Pentru obinerea convergenei sigure spre rdcina cutat ca punctul iniial
x0 trebuie s fie luat acel capt al intervalului [a,b] la care semnul funciei coincide
cu semnul primei derivatei. Deci, dac f(b) f /(x) > 0 atunci punctul iniial este
limita dreapt x0 = b, iar dac
stng x0 = a.

f(a) f /(x) > 0 atunci punctul initial va fi limita

Fie punctul de plecare al procesului de calcul este limita dreapt x0= b.


Construim o tangent la curba data in punctul B(x0, f(x0) ). La intersecia tangentei
cu axa ox se obine prima aproximare punctul x1. Construim, din nou, o tangent
la curba dat in
punctul nou B1 cu coordonate B1{ x1, f(x1)}. Intersecia ei cu axa absciselor o
notam cu x2. Din nou construim o tangent,acum n punctul B2 cu coordonate B2{
x2, f(x2)}, repetnd procedura.
Procesul de calcul genereaza un ir de aproximri succesive x1,x2,x3,...,xn ,

xn , unde este valoarea precis a rdcinii cautate.


astfel nct lim
n
Relaie de calcul pentru determinarea coordonatei xk+1 este:
x k 1 x k

f ( xk )
,
f ( x k )

f /(xk)0 ,

In cazul in care f /(xk)= 0 , atunci se va face atribuirea:

k=0,1,2,3.., n
xk+1= xk .

Calculul se oprete atunci cnd se realizeaza condiia:


| xn xn-1 | ad ,
unde ad este eroarea de aproximare admisibil.

9.Determinm rdcinile ecuaiei cu ajutorul limbajului Pascal.


Program Newton;
Var a,b,c,x:real;
i,n:integer;
Function f(x:real):real;
Begin f:=x*x*x +4*x+2 ; end;
Function f1(x:real):real;
Begin
F1:=3*sqr(x)+4;end;
a:= -1; b:=0; n:= 6;
c:= a-f(a)/(f(b)-f(a)*(b-a));
if f(c)*f(a)>0 then x:=a else x:=b;
while i<n do
begin
i:=i+1;
x:=x-f(x)/f1(x);

writeln (x=,x:15:12, f(x)=,f(x):15:12); readln ;


END.

10.Rezultatele furnizate de programul NEWTON sint urmatoarele:


Intrare
f(x)=x-4x+1
n
0
1
2
3
4
5

Ieire
x
-0.500000000000
-0.473684210527
-0.473465822232
-0.473465807729
-0.473465807729
-0.473465807729
Soluiile

1=-0.473465807729+0.01
Program Newton;
Var a,b,c,x:real;
i,n:integer;
Function f(x:real):real;
Begin f:=3*x*x*x*x +4*x*x*x-12*x*x-5 ; end;
Function f1(x:real):real;
Begin
F1:=12*x*x*x+12*x*x-24;
a:= 1; b:=2; n:= 3;
c:= a-f(a)/(f(b)-f(a)*(b-a));
if f(c)*f(a)>0 then x:=a else x:=b;
while i<n do
begin
i:=i+1;
x:=x-f(x)/f1(x);
writeln(x:15:12, f(x):15:12); readln ;
end;
end.

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