Upload
vitalik-balanici
View
17
Download
1
Embed Size (px)
DESCRIPTION
Metoda Coardei
Citation preview
Lucrare de laborator 2.
Tema: Rezolvarea aproximativă a ecua₃iilor numerice prin metoda coardeiLucrarea de laborator constă în 2 etape:
1. Rezolvarea matematică a problemei formulate. a. Se separă soluţiile ecuaţiei date, adică se stabilesc astfel de segmente (intervale) de
lungime cоt mai mică, ca fiecare din ele să conţină o singură soluţie ( metoda grafică, tabelară i a. ).
b. Se determină soluţiile cu exactitatea dată ε>0. aceasta se poate realiza prin mai multe metode (mai jos expuse). Esenţa tuturor metodelor constă оn construirea după o lege sau alta a unui şir de numere (aproximaţii) xn , care converge la soluţia căutată. Se poate deduce anumite formule, care ne permit să calculăm soluţia cu exactitatea cerută ε >0.
Exemplu 1. Fie ecuaţia x3−3 x2+2 x−1. Se pune problema de calculat una dinrădăcinile reale ale acestei ecuaţii, folosind metoda coardei, unde ε = 10−3 .
Rezolvare. Mai întîi aflăm intervalul în care se află soluţia căutată folosind metoda lui Horner (descrisă în detalii în exemplul 2):
Tabelul 3.1 -3 2 -1
0 1 -3 2 -11 1 -2 0 -1
2 1 -1 0 -1 are3 1 0 2 5 loc schimbare de semn.
Avem schimbare de semn în întervalul [2,3], rezultă ca soluţia cautată se află în acestinterval.
În continuare, vom determina termenii şirului de iteratii incepand cu x2 , ce va tinde catre solutia cautata, folosind formula (1.4)
xn+1=xn−1 f ( xn )−xn f ( xn−1 )
f ( xn )−f ( xn−1 )Cunosc î nd dejaintervalul , calculăm valoarea funcţiei înextremităţile intervalului :f ( x0 )=f (2 )=−1 , f ( x1 )=f (3 )=5
Urmatorul pas este de a calcula solutia x2
f ( x2 )=−0,599
Vom determina urmatorul termen al sirului:
x3=x1 f ( x2 )−x2 f ( x1 )
f ( x2 )−f ( x1 )=
3∙ (−0,599 )−2,16 ∙5−0,599−5
=2,249
si verificam conditia de oprire|x3−x2|=|2,249−2,16|=0,089>ε
Deoarece nu se verifica conditia |x3−x2|>ε continuam cucalculelef ( x3 )=−0,3
x4=x2 f ( x3 )−x3 f ( x2 )
f ( x3 )−f ( x2 )=
2,16 ∙ (−0,3 )−2,249∙ (−0,599 )−0,3+0,599
=¿
Aflăm¿2,337
La fel se verifică|x4−x3|=|2,337−2,249|=0,088>ε
f ( x 4 )=0,0052
Pentru următorii termeni ai şirului se repetă aceeasi procedură.
x5=x3 f ( x4 )−x4 f ( x3 )
f ( x4 )−f ( x3 )=
2,249 ∙0,052−2,337 ∙ (−0,3 )0,052+0,3
=2,324
f ( x5 )=−0,003
|x5−x4|=|2,324−2,337|=0,013>ε
x6=x4 f ( x5 )−x5 f ( x4 )
f ( x5 )−f ( x 4 )=
2,324 ∙ (−0,003 )−2,337 ∙ (−0,052 )−0,003−0,052
=2,345
f ( x6 )=0,088
|x6−x5|=|2,345−2,324|=0,021>ε
x7=x5 f ( x6 )−x6 f ( x5 )
f ( x6 )−f ( x5 )=
2,324 ∙ 0,088−2,345 ∙ (−0,003 )0,088+0,003
=2,329
f ( x7 )=0,018
|x7−x6|=|2,329−2,345|=0,016>ε
x8=x6 f ( x7 )−x7 f ( x6 )
f ( x7 )−f ( x6 )=2,345 ∙ 0,018−2,329∙0,088
0,018−0,088=2,328
f ( x8 )=0,014
|x8−x7|=|2,328−2,329|=0,001=εDupă iteraţia a 8-a s-a verificat condiţia de oprire, prin urmare, am ajuns la o soluţieaproximativă 2,329 x8=2,329ce tinde catre solutia exacta.Răspuns: solutia aproximativă este x =2,329 .
const eps=1.0e-3; var x0,x1,x:real;
function f(x:real):real; begin f:=x*x*x-3*x*x+2*x-1 ; end;
procedure coarda(x0,x1:real; var x:real); var n:integer;dx:real;
begin
if abs(f(x0))<eps then x:=x0 elseif abs(f(x1))<eps then x:=x1 else
beginwriteln('eroarea eps=', eps:6:4); writeln;writeln('n x(n-1) x(n) x(n+1) f(x(n+1)) dx'); n:=0;repeat x:=(x0*f(x1)-x1*f(x0))/(f(x1)-
f(x0)); inc(n);
writeln(n:2, x0:10:4, x1:10:4); if f(x0)*f(x) <0 then
begin dx:=abs(x1-x);x1:=x;
endelse
begin dx:=abs(x-x0);x0:=x;
end;writeln(x:10:4,f(x):10:4, dx:10:4); until
(abs(b-a)<eps) and (abs(f(x))<eps);
end; end;
beginwriteln('----------------- metoda coardei---------------');writeln('capetele intervalului');write('x0=');read(x0); write('x1='); read(x1);
writeln('f(x0)=', f(x0):8:4,'f(x1)=',f(x1):8:4); if f(x0)*f(x1)>0.0 then
writeln(' radacina nu e in intervalulu [',x0:6:2,',',x1:2,']')else
begin coarda(x0,x1,x);writeln;writeln('radacina aproximativa este x=',x:10:5);
end;readln end
Rezultat:Radacina aproximativa este x 2,329 .