Sunteți pe pagina 1din 9

Ministerul Educației,Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Departamentul Informatică și Ingineria Sistemelor

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

A verificat: Istrati Daniela

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

Rezolvăm ecuația după metoda grafică :


x+ln(x)-2=0
ln(x)=2-x
f1(x)=ln(x)
f2(x)=2-x

f1(x)
f2(x) 1 2 3 4 5

f(1) = 1+ln(1)-2 = 1+0-2 = -1


f(2) = 2+ln(2)-2 = ln(2)
f(1)*f(2)<0
Concluzie: Ecuația x+ln(x)-2=0 pe intervalul [1,2] are rădăcini reale.
 f(x)=x3-29x+34
Rezolvăm ecuația după metoda grafică :
x3-29x+34=0
x3=29x-34
f1(x)=x3
f2(x)=29x-34

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.

Rezolvăm ecuația după metoda analitică:


f(x)=x3-29x+34
f’(x)=3x2-29
f’(x)=0 => 3x2-29 = 0
3x2=29
29
x2 =
3
29 −√ 87
x1 =−
√ 3
29 √ 87
=
3
x2 =
√ 3
=
3
Separăm rădăcinile cu ajutorul metodei șirului lui Rolle:

-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

Codul programului în limbajul C++:

#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;
}

void inj(double a, double b)


{
int n=0;
if(f(a)*f(b)>=0)
{
cout<<"Nu ati introdus corect intervalul ";
return;
}
double c=a;
while(abs(b-a)>=eps)
{
c=a+(b-a)/2;
if(f(c)==0.0)
{
n++;
break;
}
else if(f(c)*f(a)<0)
{
n++;
b=c;
}
else
{
n++;
a=c;
}
}
cout<<"Radacina ecuatiei este: "<<c<<;
cout<<"Numarul de iteratii: "<<n;
}

int main()
{
double a,b;
cout<<"Introduceti intervalul: ";
cin>>a>>b;
inj(a,b);
return 0;
}

Rezultatul rulării:

3) Precizăm rădăcina obținută cu exactitatea ε = 10-6 utilizînd:

 Metoda aproximațiilor successive

 f(x)= x3-29x+34

Codul programului în limbajul C++:


#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define eps 0.000001
using namespace std;

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

 Metoda tangentelor (Newton)


Codul programului în limbajul C++:

 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;
}

void secanta(double x1,double x2)


{
double n=0,xm,x0,c;
if(f(x1)*f(x2)<0)
{
do
{
x0=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
c=f(x1)*f(x0);
x1=x2;
x2=x0;
n++;
if(c==0)
{
break;
}
xm=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
}
while(fabs(xm-x0)>=eps);
cout<<"Radacina ecuatiei este : "<<x0<<endl;
cout<<"Gasita in "<<n<<" iteratii"<<endl;
}
else
{
cout<<"Nu a fost gasita nici o solutie pe acest interval";
}
}

int main()
{
double a, b;
cout<<"Dati intervalul: ";
cin>>a>>b;
secanta(a,b);
return 0;
}
Rezultatul rulării:

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