Sunteți pe pagina 1din 5

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare Informatică şi Microelectronică
Departamentul Ingineria Software şi Automatică

RAPORT
la lucrarea de laborator nr. 1

la disciplina Metode și Modelele de calcul

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

A efectuat: st. gr. SI-181 Marcoci Maxim

A verificat: Șt.Buzurniuc

Chișinău 2019
Sarcina lucrarii. Se consideră ecuația neliniară f(x)=0ș Să se determine rădăcini ale ecuației prin metode:
1) Bisecția cu precizia 0.001.
2) Newton precizia 0.0001.
3) Secantelor precizia 0.0001.
4) Iterațiilor simple cu precizia 0.0001.

Grafic Functiei

Cod;
#include <iostream>
#include <cmath>

using namespace std;

float f(float x){


float f=-pow(x,4)+5*pow(x,2)-exp(x/10)-3;
return f;
}

float fx(float x){


float fx= pow(x,4)-5*pow(x,2)+x+exp(x/10)+3;
return fx;
}

float fx1(float x){


float fx1=4*pow(x,3)-10*x+1+exp(x/10)/10;
return fx1;
}

float fx2(float x){


float fx2=12*x*x-10+exp(x/10)/100;
return fx2;
}

float cas(float x){


float x2=-fx(x)/fx1(x)+x;
return x2;
}

void NewTon(float a, float b, float e){

float ka=fx(a)*fx2(a);
float kb=fx(b)*fx2(b);
float x;
if (ka>kb) {x=a;} else {x=b;}

while (abs(fx(x))>e){
x=cas(x);
}
cout<<"Newton:\n x="<<x<<"\n";//<<" f(x)="<<fx(x)<<"\n";
}

void Bisectie(float a, float b,float e){


float c;

while (abs(fx(c))>e){
c=(a+b)/2;
if(fx(c)<0){b=c;}
else {a=c;}
}
cout<<"Bisectie:\n c="<<c<<"\n";//<<" f(c)="<<fx(c)<<"\n";
}

void MetodSecantelor(float a, float b, float e){


float res, y;
float x1=a;
float x2=b;
do {
y=res;
res=x2-((x2-x1)/(fx(x2)-fx(x1)))*fx(x2);
x1=x2;
x2=res;
}
while (fabs(y-res)>=e);
cout<<"Secantelor:\n res="<<res<<"\n";//<<" f(res)="<<fx(res)<<"\n";

}
void IteratieSimple(float a, float b, float e){
float x0; // Начальное приближение
float x1,y;
x0=(a+b)/2.0;

x1 = x0;
y =f(x1);

while ( fabs( y-x1 ) > e ) {


x1 = y;
y = f(x1);
}
cout<<"IteratieSimple:\n y="<<x1<<"\n";//<<" f(x1)="<<fx(x1)<<"\n";

int main(){

float x=0,a=0,b=0;
float e=0.001, e2= 0.00001;
///////////////////////////////////// Нахождение интервалов

if(fx(x)>0){
b=0;
while (fx(x)>0){
--x;
b=x;
}
}

else {
a=0;
while (fx(x)<0){
++x;
a=x;
}
}

cout<<a<<" "<<b<<"\n";

/////////////////////////////////////// Метод 1.

Bisectie(a,b,e);

/////////////////////////////////////// Метод 2.

NewTon(a,b,e2);

/////////////////////////////////////// Метод 3.

MetodSecantelor(a,b,e2);
/////////////////////////////////////// Метод 4.

// cout<<"\n";
IteratieSimple(a,b,e2);
cout<<"\n\n\n";
return 0;
}

Output;

Concluzie.

Avantajele metodei de bisecare includ fiabilitatea și simplitatea acesteia.


Dezavantajul acestei metode este că înainte de a începe să o utilizați, trebuie să găsiți două puncte ale căror valori de
funcție au semne diferite. Evident, metoda nu este aplicabilă rădăcinilor cu multiplicitate și, de asemenea, nu poate
fi generalizată în cazul rădăcinilor complexe și sistemelor de ecuații.
Dezavantajele metodei Newton includ localitatea sa, deoarece se garantează convergența la o aproximare inițială
arbitrară numai dacă condiția este satisfăcută peste tot, într-o situație opusă, convergența există doar într-un anumit
cartier al rădăcinii.
  De asemenea, un dezavantaj al metodei Newton este necesitatea calculării derivatelor la fiecare etapă.

Deoarece nu este necesară cunoașterea derivatului, cu aceeași cantitate de calcul în metoda secantă, se poate obține
mai multă precizie decât în metoda Newton.

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