You are on page 1of 12

Universitatea Tehnic a Moldovei

Catedra Informatic Aplicat







RAPORT
la Metode Numerice
Lucrarea de laborator Nr.1

Tema : Rezolvarea numeric a ecuaiilor algebrice i transcendente

Varianta 11,12









A efectuat : st.gr.SI-131 Popov Eugen
A verificat : lect.sup G. Marusic

Chiinu 2014
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 =

.
3) S se precizeze rdcina obinut cu exactitatea =

,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


Realizarea lucrrii

1) Separarea rdcinilor
Pentru prima ecuaie este convenabil folosirea metodei grafice de separare a
rdcinilor.
Scriem ecuaia

sub forma () () i obinem:



a) Pentru determinarea punctelor de intersecie a funciilor () i ()
construim graficele :

Astfel ecuaia are o rdcin real (0,1).
b) Pentru a doua ecuaie folosim metoda irului lui Rolle .
Derivata ()

se anuleaz pentru x=

. Prin urmare irul lui Rolle este


urmtorul :
x -3
-


3
y 94 94,04 -8,04 -8
Avem o alternan de semn i respectiv o singur rdcin real (

).
Pentru a determina celelalte rdcini folosim metoda grafic.

Astfel mai avem 2 rdcini (,) i ()
2) Calculul rdcinii reale prin metoda njumtirii intervalului
a)

#include <iostream>
#include<math.h>
using namespace std;
double f(double x){
return 2*x-exp(-x);
}
int main(){
int k=0;
double
a = -3,
b = 3,
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;
}



b)
#include <iostream>
#include<math.h>
using namespace std;
double f(double x){
return pow(x,3)-26*x+43;
}
int main(){
int k=0;
double
a = -3,
b = 3,
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;
}





3) Calculul rdcinii reale prin metoda aproximaiilor succesive

a) Pentru aplicarea metodei aproximaiilor succesive verificm condiia de convergen.
Scriind ecuaia n forma () obinem :

()


()
Prin urmare irul converge.

Codul surs
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;

double fi(double x){
return exp(-x)/2;
}
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++;
if(abs(x1-x0)<eps){cout<<"Rez: "<<x0<<endl<<"nr de iteratii "<<k<<endl;break;}
x0=x1;

}
}



a)

Verificm condiia de convergen :

=>

=>

=> ()

=>

()

=>



#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;

double fi(double x){
return (pow(x,3)+43)/26;
}

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++;
if(abs(x1-x0)<eps){cout<<"Rez: "<<x0<<endl<<"nr de iteratii "<<k<<endl;break;}
x0=x1;

}
}




4) Calculul rdcinii reale prin metoda tangentelor(Newton)
a)
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;

double f(double x){
return 2*x-exp(-x);
}

double fderiv(double x){
return exp(-x)+2;
}

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<<"Rez: "<<x0<<endl<<"nr de iteratii "<<k<<endl;break;}
x0=x1;

}
}




b)
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;

double f(double x){
return pow(x,3)-26*x+43;
}

double fderiv(double x){
return 3*pow(x,2)-26;
}

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<<"Rez: "<<x0<<endl<<"nr de iteratii "<<k<<endl;break;}
x0=x1;

}
}




5) Calculul rdcinii reale prin metoda secantelor

a)
#include <iostream>
#include <math.h>
using namespace std;

double f(double x)
{
return 2*x-exp(-x);
}
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;
}




b)
#include <iostream>
#include <math.h>
using namespace std;
double f(double x)
{
return pow(x,3)-26*x+43;
}
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;
}




















6) Compararea rezultatelor i concluzia
Metoda Rdcina (

) Nr. de iteraii Valoarea (

) Eroarea
() () () () () ()
Biseciei 0.351654 1.93057 16 16 0.0002 0.0006 0.0001
Apr. succesive 0.351733 1.93061 14 16 0.000002 0.000016 0.000001
Tangentelor 0.351734 1.93061 4 4 0.0000008 0.000016 0.000001
Secantelor 0.351734 1.93061 5 9 0.0000008 0.000016 0.000001














Concluzie :
n urma efecturii lucrrii de laborator am realizat n practic rezolvarea numeric a ecuaiilor algebrice i
transcendente. Putem concluziona c cea mai eficient metoda este metoda tangentelor,calculatorul
efectund un numar minim de iteraii , ns numarul acestor iteraii este dependent de aproximaia iniial
aleas. Acest numr este cu att mai mic cu ct aproximaia iniial este mai aproape de rdcina cutat.
La fel se observ din tabel c metoda Newton converge ctre soluie cu vitez ptratic ,aceasta fiind un
caz particular a metodei aproximaiilor succesive. O alt vulnerabilitate a acestei metode este necesitatea
calculului derivatei, ceea ce n unele cazuri poate fi dificil sau practic imposibil. Pentru astfel de funcii o
alegere mai bun este metoda secantelor. La fel putem afirma rezultatul obinut pe baza acestei metode
are o precizie destul de mare.