Documente Academic
Documente Profesional
Documente Cultură
RAPORT
la Metode Numerice
Varianta 25, 26
A verificat : V. Moraru
Chișinău 2021
Scopul lucrării :
1. Să se separe toate rădăcinile reale ale ecuației f(x)=0 unde y=f(x) este o funcție reală de
variabilă reală.
2. Să se determine o rădăcina reală a ecuației date cu ajutorul metodei înjumătățirii
intervalului cu o eroare mai mică decît ε= 10−2 .
3. Să se precizeze rădăcina obținută cu exactitatea ε= 10−6 , utilizând:
• metoda aproximațiilor succesive ;
• metoda tangentelor (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ă.
Realizarea lucrării
1) Separarea rădăcinilor
Pentru prima ecuație folosim metoda șirului lui Rolle .
Derivata f ' (x )=3 x 2−15−x se anuleaza pentru x1 = -1.92744, x2 = 2.59411
x -5 -1.9 2.6 7
y -56 37 -9.1 208
int main()
{
double x1, x2, val;
int sir, i;
float array[20];
string arrayCH[30];
x1 = (1 - sqrt(46)) / 3;
x2 = (1 + sqrt(46)) / 3;
double f(double x)
{
return cos(x) + 2 * x +5;
}
int main()
{
int k = 0;
double
a = -5,
b = 7,
c = 0,
eps = 0.0001;
while ((b - a) > eps)
{
k++;
c = a + (b - a) / 2;
if (f(c) == 0)
break;
if (f(a) * f(c) < 0)
b = c;
else
a = c;
}
cout << " Radacina x=" << c << endl;
cout << "Numarul de iteratii: " << k;
return 0;
}
Codul:
#include <iostream>
#include <math.h>
double f(double x)
{
return pow(x,3) - 15 * x - pow(x,2) + 19;
}
int main()
{
int k = 0;
double
a = -5,
b = 7,
c = 0,
eps = 0.0001;
while ((b - a) > eps)
{
k++;
c = a + (b - a) / 2;
if (f(c) == 0)
break;
if (f(a) * f(c) < 0)
b = c;
else
a = c;
}
cout << " Radacina x=" << c << endl;
cout << "Numarul de iteratii: " << k;
return 0;
}
a ¿ cos x +2 x−15=0
Codul:
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
double fi(double x)
{
return (- cos(x) + 15) / 2;
}
main()
{
int k = 0;
double x0, x1, eps;
cout << "Introduceti valoare initiala x0= ";
cin >> x0;
eps = 0.0000001;
while (1)
{
x1 = fi(x0);
k++;
if (fabs(x1 - x0) < eps)
{
cout << "Rez: " << x0 << endl
<< "nr de iteratii " << k << endl;
break;
}
x0 = x1;
}
}
3 2
b ¿ x −15 x−x + 19=0
Codul:
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
double fi(double x)
{
return (pow(x,3) - pow(x,2) + 19) / 15;
}
main()
{
int k = 0;
double x0, x1, eps;
cout << "Introduceti valoare initiala x0= ";
cin >> x0;
eps = 0.0000001;
while (1)
{
x1 = fi(x0);
k++;
if (fabs(x1 - x0) < eps)
{
cout << "Rez: " << x0 << endl
<< "nr de iteratii " << k << endl;
break;
}
x0 = x1;
}
}
a) cos x +2 x−15=0
Codul:
#include <iostream>
#include <cmath>
#include <cstdlib>
double f(double x)
{
return cos(x) + 2*x -15;
}
double fderiv(double x)
{
return -sin(x) + 2;
}
main()
{
int k = 0;
double x0, x1, eps;
cout << "Introduceti valoare initiala x0= ";
cin >> x0;
eps = 0.0000001;
while (1)
{
x1 = x0 - f(x0) / fderiv(x0);
k++;
if (fabs(x1 - x0) < eps)
{
cout << "Rez: " << x0 << endl
<< "nr de iteratii " << k << endl;
break;
}
x0 = x1;
}
}
3 2
b ¿ x −15 x−x + 19=0
Codul:
#include <iostream>
#include <cmath>
#include <cstdlib>
double f(double x)
{
return pow(x,3) - 15 * x - pow(x,2) + 19;
}
double fderiv(double x)
{
return 3 * pow(x,2) - 15 - 2 * x;
}
main()
{
int k = 0;
double x0, x1, eps;
cout << "Introduceti valoare initiala x0= ";
cin >> x0;
eps = 0.0000001;
while (1)
{
x1 = x0 - f(x0) / fderiv(x0);
k++;
if (fabs(x1 - x0) < eps)
{
cout << "Rez: " << x0 << endl
<< "nr de iteratii " << k << endl;
break;
}
x0 = x1;
}
}
a ¿ cos x +2 x−15=0
Codul:
#include <iostream>
#include <math.h>
using namespace std;
double f(double x)
{
return cos(x) + 2*x -15;
}
main()
{
double x2, x1, x3, y, eps = 0.000001;
int n = 0;
cout << "Introduceti x1: ";
cin >> x1;
cout << "Introduceti x2: ";
cin >> x2;
do
{
n++;
y = x3;
x3 = x2 - (f(x2) * (x2 - x1) / (f(x2) - f(x1)));
x1 = x2;
x2 = x3;
} while (fabs(y - x3) >= eps);
cout << "Radacina x= " << x3 << endl;
cout << "Nr de iteratii : " << n << endl;
}
3 2
b ¿ x −15 x−x + 19=0
Codul:
#include <iostream>
#include <math.h>
using namespace std;
double f(double x)
{
return pow(x,3) - 15 * x - pow(x,2) + 19;
}
main()
{
double x2, x1, x3, y, eps = 0.000001;
int n = 0;
cout << "Introduceti x1: ";
cin >> x1;
cout << "Introduceti x2: ";
cin >> x2;
do
{
n++;
y = x3;
x3 = x2 - (f(x2) * (x2 - x1) / (f(x2) - f(x1)));
x1 = x2;
x2 = x3;
} while (fabs(y - x3) >= eps);
cout << "Radacina x= " << x3 << endl;
cout << "Nr de iteratii : " << n << endl;
}
Concluzie :