RAPORT
Lucrarea de laborator nr.1
Disciplina: Metode numerice
Varianta 17
A efectuat:
st. gr. CR-212 Tabureanu Marian
Chisinau 2022
Tema: Rezolvarea numerica a ecuatiilor algebrice si transcendenta.Separarea radacinilor.
Scopul lucrarii :
1) Sa se separe toate radacinile reale ale ecuatiei f(x)=0 unde y=f(x) este o functie reala de variabila
reala.
2) Să se determine o radacina reala a ecuatiei date cu ajutorul metodei injumatatirii intervalului cu o
eroare mai mica decit ε=10-2 .
3) Sa se precizeze radacina obtinuta cu exactitatea ε= 10-6 ,utilizind:
Mersul lucrarii
Pentru separarea radacinilor pentru prima ecuatie am folosit metoda grafica, metoda analitica si sirul
lui Rolle de separare a radacinilor:
2x+3 x−0.5=0
x -1 1 2 3
f(x) -3 4.5 9.5 16.5
Prin urmare avem 2 alternante de semn pe intervalul (-1.1;3.4), deci rezulta ca avem 2 radacini reale
pe acest interval
r1 ∈ (-1;1) , r2 ∈ (1 ;2), r3 ∈ (2 ;3)
Metoda grafica
Graficul pentru 2x si 3 x−0,5
Fig.1 Graficul functiei y=2x si y=3x-0,5
Din grafic observam ca intersectiile au loc in intervalele (0,9;1,9),(3,1;9)
Metoda analitica
Pentru cea de-a 2-a ecuatie am folosit la fel metoda grafica si metoda analitica de separare a
radacinilor:
x3−37 x−52=0
Metoda analitica
−a
Se calculeaza c=a+ b , daca c=0, atunci c este radacina cautata, in caz contrar : a
(b)>0=¿a=c;b=b;
Iteratiile se repeta pina cind este respectata conditia (b-a)<ε unde ε este eroarea
Metoda aproximatiilor succesive
Pentru a folosi Metoda aproximatiilor succesive, e necesar de pus ecuatia sub forma x=φ(x).
Pentru ca metoda sa convearga catre radacina e necesar de a se respecta conditia de convergenta :
Functia φ(x) e derivabila si derivata sa φ' (x) satisface inegalitatea ¿φ' ( x )∨≤α<1, oricare ar fi x∈ [
a,b].
f (xk )
xk+1=xk − f '(xk ) ,k=0,1,2,…
Pentru a asigura convergenta procesului iterational e necesar ca din valorile a si b sa fie aleasa in
calitate de solutie initiala x0 acea valoare pentru care are loc inegalitatea f ( x )∗f ' ' ( x )>0
Metoda secantelor
Metoda secantelor poate fi dedusa din metoda lui Newton. Formula iteativa pentru calcularea
aproximativa a solutiilor prin metoda secantelor este :
(xk )∗xk−xk−1
xk+1=xk −f ,k=0,1,…
f (xk )−f (xk−1)
La fel ca pentru Metoda lui Newton in calitate de solutie initiala x0 vom alege acea valoare
pentru care are loc inegalitatea : f ( x )∗f ' ' ( x )>0
Finisarea procesului iterational are loc atunci cind aleasa in calitate de solutie initiala x0 acea valoare
pentru care are loc inegalitatea ¿ xk+1−xk ∨≤ε, unde ε este eroarea.
Codul programului
#Var 18
import math
def fa(x):
return pow(2,x)+3*x-0.5
def fb(x):
return pow(x,3)-37*x-52
def fapr1(x):
return (pow(2,x) - 0.5) / 3 def
fapr2(x):
return (pow(x,3)-52)/37
def fder1(x):
return x*pow(2,x-1)+3
def fder2(x):
return 3*pow(x,2)-37 def
inj(f):
print('Metoda injumatatirii intervalului ')
i=0
eps=0.01
a=float(input('Introducem intervalul a :'))
b=float(input('Introducem intervalul b :'))
while ((b-a)>eps):
i+=1
c=(a+b)/2
if f(c)==0:
break
if (f(a)*f(c)<0):
b=c
else:
a=c
print('Radacina este:'+ str(c) + '\nNumarul de interatii este '+str(i))
def aprox(fn):
print('Metoda aproximatiilor succesive')
k=0
eps=0.000001
x0=float(input('Introduceti valoare initiala x0:'))
while (1):
x1=fn(x0)
k+=1
if (abs(x1-x0)<eps):
print('Radacina este' +str(x0)+ '\nNumarul de iteratii '+str(k))
break
x0=x1 def
new(f,fd):
print('Metoda lui Newton')
k=0
eps=0.000001
x0=float(input('Introduceti valoare initiala x0:'))
while (1):
x1 = x0 - f(x0) / fd(x0)
k+=1
if (abs(x1-x0)<eps):
print('Radacina este:'+ str(x0)+'\nNumarul de iteratii: '+str(k))
break
x0=x1 def sec(f):
print('Metoda secantelor')
n=0
eps=0.000001
x3=0
print('Introduceti intervalul')
x1=float(input('a='))
x2=float(input('b='))
n+=1
y=x3
x3=x2-(f(x2)*(x2-x1)/(f(x2)-f(x1)))
x1=x2
x2=x3
while (abs(y-x3)>=eps):
return f'Radacina este :{x3}\nNumarul de iteratii:{n}'
print('Radacina este :'+str(x3)+'\nNumarul de iteratii: '+str(n)) def
selFunc():
print('Alegeti functia:\n1.Functia f1(x)=2^x+3x-0.5\n2.Functia f2(x)=x^3-
37x-52')
n=int(input())
if n==1:
f=fa
fn=fapr1
fd=fder1
return f'{inj(f)},{aprox(fn)},{new(f,fd)},{sec(f)}'
elif n==2:
f=fb
fn=fapr2
fd=fder2
return f'{inj(f)},{aprox(fn)},{new(f,fd)},{sec(f)}'
print (selFunc())
Rezultatele obtinute
Compararea rezultatelor
Radacina Iteratiile