Sunteți pe pagina 1din 12

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică si Microelectronică

Departamentul Informatică si Ingineria Sistemelor

Lucrare de laborator Nr.1

Metode și modele de calcul

Tema: Rezolvarea numerică a ecuațiilor algebrice și transcendente


Varianta Nr: 12

A elaborat: st.gr.IA-191 Didic Victor

A verificat: Moraru Vasile

Chișinău 2020

1.Scopul lucrării
1. 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. 2)  Să se determine o rădăcină reală a ecuaţiei date cu ajutorul metodei


înjumătăţirii intervalului cu o eroare mai mică decât ε=10-2.

3. 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ția şi derivată.

a) x3-cos(x)

b) x3+14x-6

a) Metoda grafică. Adeseori ecuaţia f(x)=0 poate fi pusă sub forma echivalentă
φ(x)=g(x). Rădăcinile ultimei ecuației sunt abscisele punctelor de intersecție ale
curbelor y=φ(x) şi y=g(x).
2. Determinarea rădăcinilor reale a ecuației date cu ajutorul metodei înjumătățirii
-2
intervalului cu o eroare mai mică decât ε = 10 .

a) x3-cos(x)

#include <iostream>
#include <cmath>
using namespace std;
double function(double x)
{
return pow(x,3)-cos(x);
}
int main()
{
int k = 0;
double
a = -2,
b = 2,
c = 0,
eps = 0.01;

while ((b - a)>eps)


{
k++;
c = a + (b - a) / 2;
if (function(c) == 0)
break;
if (function(a)*function(c)<0)
b = c;
else
a = c;
}
cout << "Radacina lui x= " << c << endl;
cout << "Iteratii: " << k<<endl;
return 0;
}

b) x3+14x-6
#include <iostream>

#include <cmath>
using namespace std;
double function(double x)
{
return pow(x,3)+(14*x)-6;
}
int main()
{
int k = 0;
double
a = -2,
b = 2,
c = 0,
eps = 0.01;

while ((b - a)>eps)


{
k++;
c = a + (b - a) / 2;
if (function(c) == 0)
break;
if (function(a)*function(c)<0)
b = c;
else
a = c;
}
cout << "Radacina lui x= " << c << endl;
cout << "Iteratii: " << k<<endl;
return 0;
}

3. Calculul rădăcinii reale prin metoda aproximațiilor successive.

a) x3-cos(x)

#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double function(double x)
{
return (-0.5)/(2.43+sin(x));
}
int main()
{
int k = 0;
double x0, x1, eps;
cout << "Valoarea initiala x0= ";
cin >> x0;
cout << "Valoarea Epsilon = ";
cin >> eps;
while (1)
{
x1 = function(x0);
k++;
if (abs(x1 - x0)<eps)
{ cout << "Rezultatul: " << x0 << endl << "Numarul de iteratii " << k << endl; break; }
x0 = x1;
}
}

b) x3+14x-6

#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double function(double x)
{
return (pow(x,3)-6)/(-14) ;
}
int main()
{
int k = 0;
double x0, x1, eps;
cout << "Valoarea initiala x0= ";
cin >> x0;
cout << "Valoarea Epsilon = ";
cin >> eps;
while (1)
{
x1 = function(x0);
k++;
if (abs(x1 - x0)<eps)
{ cout << "Rezultatul: " << x0 << endl << "Numarul de iteratii " << k << endl; break; }
x0 = x1;
}
}

4. Calculul rădăcinii reale prin metoda tangentelor(Newton).

a) x3-cos(x)
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double function(double x)
{
return pow(x,3)-cos(x);
}
double fderivat(double x)
{
return sin(x)+(3*pow(x,2));
}
int main()
{
int k = 0;
double x0, x1, eps;
cout << "Valoare initiala x0: ";
cin >> x0;
cout << "Valoarea lui Epsilon: ";
cin >> eps;
while (1)
{
x1 = x0 - function(x0) / fderivat(x0);
k++;
if (abs(x1 - x0)<eps)
{ cout << "Rezultatul: " << x0 << endl << "Numarul de iteratii " << k << endl; break; }
x0 = x1;
}

b) x3+14x-6

#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double function(double x)
{
return pow(x,3)+(14*x)-6;
}
double fderivat(double x)
{
return (3*pow(x,2))+14;
}
int main()
{
int k = 0;
double x0, x1, eps;
cout << "Valoare initiala x0: ";
cin >> x0;
cout << "Valoarea lui Epsilon: ";
cin >> eps;
while (1)
{
x1 = x0 - function(x0) / fderivat(x0);
k++;
if (abs(x1 - x0)<eps)
{ cout << "Rezultatul: " << x0 << endl << "Numarul de iteratii " << k << endl; break; }
x0 = x1;
}
}

5. Calculul rădăcinii reale prin metoda secantelor.

a) x3-cos(x)

#include <iostream>
#include <math.h>
using namespace std;
double function(double x)
{
return pow(x,3)-cos(x);
}
int main()
{
double x2, x1, x3=0, y, eps = 0.000001;
int n = 0;
cout << "Introduceti x1: ";
cin >> x1;
cout << "Introduceti x2: ";
cin >> x2;
do
{
n++;
y = x3;
x3 = x2 - (function(x2)*(x2 - x1) / (function(x2) - function(x1)));
x1 = x2;
x2 = x3;
} while (fabs(y - x3) >= eps);
cout << "Radacina x= " << x3 << endl;
cout << "Numarul de iteratii : " << n << endl;
return 0;}

b) x3+14x-6

#include <iostream>
#include <math.h>
using namespace std;
double function(double x)
{
return pow(x,3)+(14*x)-6;
}
int main()
{
double x2, x1, x3=0, y, eps = 0.000001;
int n = 0;
cout << "Introduceti x1: ";
cin >> x1;
cout << "Introduceti x2: ";
cin >> x2;
do
{
n++;
y = x3;
x3 = x2 - (function(x2)*(x2 - x1) / (function(x2) - function(x1)));
x1 = x2;
x2 = x3;
} while (fabs(y - x3) >= eps);
cout << "Radacina x= " << x3 << endl;
cout << "Numarul de iteratii : " << n << endl;

return 0;}

Concluzie: În urma acestei lucrări de laborator am aplicat în practică cunoștințele obținute


în urma materialelor și cursurilor teoretice. Efectuând toate aceste calcule am elaborat pentru
fiecare metodă de aflare a rădăcinii un program în C++ care ne-a afișat rezultatul și numărul
de iterații.

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