Sunteți pe pagina 1din 7

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare Informatica si Microelectronica

RAPORT
Lucrarea de laborator nr.1
Disciplina: MMC1
Tema:REZOLVAREA NUMERICĂ A ECUAŢIILOR ALGEBRICE ŞI
TRANSCENDENTE

A efectuat:
st. gr. CR-191 Frecventa Redusa Balan Ion

A verificat:
lect., sup. Godonoga Anatol

Chisinau 2020
Scopul lucrării:
1)Să se separe toate rădăcinişe 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ăcină reală a ecuaţiei date cu ajutorul metodei
înjumătăţirii intervalului cu o eroare mai mică decât .
3) Să se precizeze rădăcina obţinută cu exactitatea , 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ă.
Mersul lucrării:
Pentru a putea aplica metodele sus numite este necesară determinarea
intervalului pe care se găseşte soluţia ecuaţiei date. Pentru ecuaţia
algebrică am determinat intervalul cu ajutorul şirului lui Rolle.

F’(x)=(1/x+1)-4
F’(x)=3x^2-25
Construim şirul lui Rolle:
x -1 -2i 2i 0
F(x) -8 5 5 5
De aici rezultă că ecuaţia dată are o singură rădăcină în intervalul [-1;0]

Am elaborat programul în C++ care realizează sarcina dată, listingul este


următorul:
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
double fx(double x);
double f1x(double x);
double f2x(double x);
void INPUT(void);
void BISECTIA(double a,double b, double e);
void APROX_SUCCESIV(double a,double b, double e);
void NEWTON(double a,double b, double e);
void Combinat(double a,double b, double e);
double a,b,e,Nmax;
void main(void)
{int n;
textbackground(WHITE);
textcolor(BLACK);
clrscr();
while(1)
{
cout<<"Se da ecuatia: x^3-25x+19=0\n"
<<"Alegeti metoda de gasire a solutiei:\n"
<<"1. Metoda Bisectiei;\n"
<<"2. Metoda Aproximatiilor succesive;\n"
<<"3. Metoda Newton;\n"
<<"4. Metoda Combinata a coardelor si tangentelor;\n"
<<"5. Toate metodele;\n"
<<"0. Iesire din program;\n";
cin>>n;
switch(n)
{
case 1:INPUT();BISECTIA(a,b,e);break;
case 2:INPUT();APROX_SUCCESIV(a,b,e);break;
case 3:INPUT();NEWTON(a,b,e);break;
case 4:INPUT();Combinat(a,b,e);break;
case 5:INPUT();BISECTIA(a,b,0.01);APROX_SUCCESIV(a,b,e);
NEWTON(a,b,e);Combinat(a,b,e);break;
case 0:exit(0);

}
clrscr();
}

double fx(double x)
{
return 3*x*x*x-25*x+19;
}

double f1x(double x)
{
return6*x*x-25;
}

double f2x(double x)
{ return 6*x;
}

void BISECTIA(double a,double b, double e)


{
double c,k=0;
do
{if(a*b>0)c=a+(b-a)/2;
else c=(a+b)/2;
++k;
if(fx(a)*fx(c)<0)b=c;
else a=c;
if(fx(c)==0)break;
}
while((fabs(b-a)>=e)&&(k<=Nmax));
cout<<"x="<<c;
cout<<"\nNumarul de iteratii :"<<k<<endl;
getch();
}

void APROX_SUCCESIV(double a,double b, double e)


{
double y,x,k=0;
y=a;
do
{
x=y;
if(fx(x)==0)break;
//y=((-3)*x*x-5)/12;
y=(x*x*x+5)/(-12);
k++;
}
while((fabs(y-x)>=e)&&(k<=Nmax));
cout<<"x="<<x;
cout<<"\nNumarul de iteratii :"<<k<<endl;
getch();
}

void NEWTON(double a,double b, double e)


{
double d,d0=1e30,x1,x,k=0;
if(fx(a)*f2x(a)>0)x=a;
else x=b;
do
{
x1=x-fx(x)/f1x(x);
if(fx(x1)==0)break;
d=fabs(x1-x);
if(d<e)break;
if(d<d0)
if(k<Nmax){ x=x1;++k;d0=d;}
else {cout<<"Precizia nu poate fi atinsa dupa "<<Nmax<<" pasi";
getch();exit(0);}
else {cout<<"Nu are loc convergenta catre solutia data";
getch();exit(0);}
}while(d>=e);
cout<<"x="<<x1;
cout<<"\nNumarul de iteratii :"<<k<<endl;
getch();
}

void Combinat(double a,double b, double e)


{
double x,xt,k=0;
if(fx(a)*fx(b)<0)x=a-fx(a)*(b-a)/(fx(b)-fx(a));
if(fx(a)*fx(x)<=0){xt=a;

do
{
x=x-fx(x)*(x-a)/(fx(x)-fx(a));
xt=xt-fx(xt)/f1x(xt);
++k;
}
while((fabs(x-xt)>=e)&&(k<=Nmax));
}

else {xt=b;
do
{
x=x-fx(x)*(b-x)/(fx(b)-fx(x));
xt=xt-fx(xt)/f1x(xt);
++k;
}
while((fabs(x-xt)>=e)&&(k<=Nmax));
}

cout<<"x="<<(x+xt)/2;
cout<<"\nNumarul de iteratii :"<<k<<endl;
getch();
}

void INPUT(void)
{
cout<<"Introduceti [a;b] :";
cin>>a>>b;
if(a>b){cout<<"INPUT EROR!";getch();exit(0);}
cout<<"Introduceti eroarea absoluta :";
cin>>e;
cout<<"Introduceti nr maxim de iteratii :";
cin>>Nmax;
}
Rezultatele afişate de acest program sunt următoarele:
Pentru ecuaţia algebrică:
Pentru ecuaţia transcendentă avem:
Concluzie:
In urma elaborarii lucrarii de laborator am facut cunostinta cu metodele
de rezolvare a ecuatiilor algebrice si transcendente. Ca urmare am
determinat radacinile reale ale ecuatiilor noastre cu ajutorul metodei
injumatatirii intervalului. Precum si precizarea radacinii obtinute prin
metodele:
-aproximatiilor succesive
-tangentelor(Newton)
-secantelor.

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