Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrare de laborator nr.1
La Modele și metode de calcul I
Rezolvarea numerică a ecuațiilor algebrice și transcendente
Varianta 9,10
A efectuat: Ureche
Daniela
st.gr.AI-182
Chișinău-2019
Scopul lucării:
1) Să se separe rădăcinile reale ale ecuației f(x)=0 unde y=f(x) este funcție reală de variabilă
reală.
2)Să se determine o rădăcină reală a ecuației date cu ajutorul metodei înjumătățirii intervalului
cu o eroare mai mica decât ε=10-2.
3)Să se precizeze rădăcina obținută cu exactitatea ε=10-6, utilizând:
Metoda aproximațiilor succesive;
Metoda tangetelor (Newton);
Metoda secantelor.
4)Să se compare rezultatele luând în considerație numărul de iterații, evaluările pentru funcții și
derivată.
Mersul lucrării :
1) După variantă avem :
f(x)=x+ln(x)-2
f1(x)
f2(x) 1 2 3 4 5
f1(x) -7 -6 -5 -4 -3 -2 -1 1 2 3 4 5
f2(x)
f(0) = 03-29*0+34 = 34
f(2) = 23-29*3+34 = 8-87-34 = -45
f(0)*f(2)<0
Concluzie: Pe intervalul [0,2] ecuația x3-29x+34=0 are rădăcini reale.
-4 −√ 87
3
√ 87
3
4
+ + - -
−√ 87 √ 87
Concluzie: Ecuația x3-29x+34=0 pe intervalul [ ; ] are rădăcini reale.
3 3
2) Determinăm cu ajutorul metodei înjumătățirii intervalului o rădăcină reală a ecuației date
cu o eroare mai mica decât ε = 10-2.
f(x)= x3-29x+34
#include <iostream>
#include <stdlib.h>
#include <cmath>
#define eps 0.01
using namespace std;
double f(double x)
{
return x*x*x-29*x+34;
}
int main()
{
double a,b;
cout<<"Introduceti intervalul: ";
cin>>a>>b;
inj(a,b);
return 0;
}
Rezultatul rulării:
f(x)= x3-29x+34
double f(double x)
{
return x*x*x-29*x+34;
}
int main()
{
int k;
double x;
system("cls");
cout<<"Metoda aproximatiilor succesive"<<endl;
k=0;
double x0,y;
cout<<"Dati aproximarea initiala: x0=";
cin>>x0;
y=x0;
do
{
x=y;
y=f(x);
k++;
}
while(fabs(y-x)>eps);
cout<<"Solutia aproximativa a ecuatiei este :"<<x<<endl;
cout<<"Numarul de iteratii este: "<<k;
return 0;
}
Rezultatul rulării:
1.238
8
f(x)= x3-29x+34
#include <iostream>
#include <cmath>
#include <cstdlib>
#define eps 0.000001
using namespace std;
double f(double x)
{
return x*x*x-29*x+34;
}
double f1(double x)
{
return 3*x*x-29;
}
int main()
{
int n=0;
double x0,x;
cout<<"Dati solutia initiala: ";
cin>>x;
x0=x;
while(abs(f(x))>=eps)
{
x=x0-f(x0)/f1(x0);
x0=x;
}
cout<<"Solutia finala este: "<<x<<endl;
cout<<"Numarul de iteratii in care a fost gasita solutia este: "<<n;
return 0;
}
Rezultatul rulării:
Metoda secantelor
Codul programului în limbajul C++:
f(x)= x3-29x+34
#include <iostream>
#include <cstdlib>
#include <cmath>
#define eps 0.000001
using namespace std;
double f(double x)
{
return x*x*x-29*x+34;
}
int main()
{
double a, b;
cout<<"Dati intervalul: ";
cin>>a>>b;
secanta(a,b);
return 0;
}
Rezultatul rulării: