Documente Academic
Documente Profesional
Documente Cultură
Raport
Lucrarea de laborator Nr.1
la Metode Numerice
A efectuat:st.gr.TI-142
A verificat:
Chisinau 2015
Scopul lucrrii :
1) S se separe toate rdcinile reale ale ecuaiei f(x)=0 unde y=f(x) este o funcie real de
variabil real.
2) S se determine o radacin real a ecuaiei date cu ajutorul metodei njumtirii intervalului
cu o eroare mai mic dect =10-2
3) S se precizeze rdcina obinut cu exactitatea = 10-6 ,utiliznd:
metoda aproximaiilor succesive ;
metoda tangentelor (Newton);
metoda secantelor .
4) S se compare rezultatele lund n consideraie numrul de iteraii , evaluarile pentru funcii i
derivat.
Ecuaiile propuse spre rezolvare :
Varianta 15 : (2-x) e
Varianta 16 :
- 0.5=0
x 3 - 12x + 9 = 0
Realizarea lucrrii :
1) Separarea rdcinilor
Pentru prima ecuaie este convenabil folosirea metodei grafice de separare a rdcinilor.
x
Scriem ecuaia (2-x) e - 0.5=0 sub forma ( x ) = ( x) i obinem:
0.5
ex =
2x ;
a) Pentru determinarea punctelor de intersecie a funciilor
y=(x) si
(x)
construim graficele :
x
y
-3
18
-2
25
2
-7
3
0
b)
#include <iostream>
#include<math.h>
using namespace std;
double f(double x) {
return pow(x, 3) - 12 * x + 9;
}
int main() {
int k = 0;
double
a = -2,
b = 2,
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;
cout << endl;
system("pause");
return 0;
}
a)
Verificm condiia de convergen :
x 3 - 12x + 9 = 0 => -12x = -9 =
1 3
x
12
' (x ) =
x 3 => x =
9
12
3 2
x
12
3 2
x
> 1 => -2 < x < 2
12
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double fi(double x) {
return (pow(x, 3) + 9) / 12;
}
int main() {
int k = 0;
double x0, x1, eps;
cout << "Introduceti valoare initiala x0= ";
cin >> x0;
cout << "introduceti eroarea : ";
cin >> eps;
while (1) {
x1 = fi(x0);
k++;
x +9
12
=> x =
1 3
x
+
12
9
12
=> ( x )
if (abs(x1 - x0)<eps) { cout << "Rezultat: " << x0 << endl << "Nr de iteratii " <<
k << endl; break; }
x0 = x1;
}
cout << endl;
system("pause");
return 0;
}
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double f(double x) {
return (2 - x) * exp(x) - 0.5;
}
double fderiv(double x) {
return -exp(x) - (2 - x)*exp(x);
}
int main() {
int k = 0;
double x0, x1, eps;
cout << "Introduceti valoare initiala x0= ";
cin >> x0;
cout << "introduceti eroarea : ";
cin >> eps;
while (1) {
x1 = x0 - f(x0) / fderiv(x0);
k++;
if (abs(x1 - x0)<eps) { cout << "Rezultat " << x0 << endl << "Nr de iteratii " << k
<< endl; break; }
x0 = x1;
}
cout << endl;
system("pause");
return 0;
}
b)
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double f(double x) {
return pow(x,3) - 12*x + 9;
}
double fderiv(double x) {
return 3 * pow(x, 2)-12;
}
int main() {
int k = 0;
double x0, x1, eps;
cout << "Introduceti valoare initiala x0= ";
cin >> x0;
cout << "introduceti eroarea : ";
cin >> eps;
while (1) {
x1 = x0 - f(x0) / fderiv(x0);
k++;
if (abs(x1 - x0)<eps) { cout << "Rezultat " << x0 << endl << "Nr de iteratii " << k
<< endl; break; }
x0 = x1;
}
system("pause");
return 0;
}
b)
#include <iostream>
#include <math.h>
using namespace std;
double f(double x)
{
return pow(x, 3) - 12 * x + 9;
}
int main()
{
double x2, x1, x3, y, eps = 0.000001;
int n = 0;
x3 = 0;
y = 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;
system("pause");
return 0;
Radacina (x0)
Nr. De iteratii
Valoarea f = (x0)
f1(x)
f(x)
f1(x)
f(x)
f1(x)
Bisectiei
0.789063
1.92969
0.0008
0.002
Apr. Succesive
0.791289
1.92722
Tangentelor
0.791288
1.92722
10
0.0000000
9
0.0000001
Secantelor
0.791288
1.92722
0.0000001
0.000000
2
0.000000
1
0.000000
3
Eroarea
f(x)
0.01
0.000001
0.000001
0.000001
Concluzie :