Вы находитесь на странице: 1из 5

Ministerul Educației al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoarelor, Informatică și
Microelectronică

Raport
La Lucrarea de laborator nr.1

Disciplina: Metode și modele de calcul

A îndeplinit st. gr. CR-182 Mardari Ion

A verificat pr. Universitar Istrati Daniela

Chișinău 2019
Codul pentru Înjumătățirea intervalelor
#include<iostream>

#include<conio.h>

#include<stdio.h>

#include<math.h>

#include<stdlib.h>

using namespace std;

double ec(double x){ double y=pow(x,3)-23*x-42;return y;}

int main()

{ int a,b,k;

double c,d,x,fx;

system("cls");

cout<<"\nIntrodu intervalul[a,b]:";cin>>a>>b;

cout<<"\n** METODA INJUMATATIRII **";

if(ec(a)*ec(b)<0){

c=a;

if(ec(c)<0) c=b;

d=a+b-c;

k=0;

do

{ x=c+(d-c)/2; //formula de calcul

k++;

fx=ec(x);

if (fx==0) break;

if (fx>0) c=x;else d=x;}

while(fabs(c-d)>0.01);

cout<<"\nRadacina este: "<<x;

cout<<"\nNr. iteratiilor: "<<k;

getch();

}}

2
Metoda lui Newton
#include <conio.h>
#include <iostream>
#include <math.h>
using namespace std;

float f1(float x)
{
return pow(x,3)-37*x-52;
}

float F1(float x)
{return 3*pow(x,2)-37;}

float Fd1(float x)
{return 6*x;}

float newton(float x0, float eps, int Nmax, int *k, int *ier,int i)
{
float d0=1e30,d1,y,x=x0,x1;
*k=0;
Et:
x1=x-f1(x)/F1(x);
d1=fabs(x1-x);
if (d1<eps)
{*ier=0; return x1;}
else
{
if (d1<d0)
{
if (*k>Nmax)
{*ier=2; return x1;}
else
*k=*k+1;
x=x1;d0=d1;
goto Et;
}
else
{
*ier=1; return x1;
}
}
}

int main()
{
float a,b,eps=0.000001,x=0;
int n=0,Tf,nm1, nm2,i=0,Nmax=100;
cout<<"\nIntroduceti intervalul [a,b]";
cout<<"\na= "; cin>>a;
cout<<"\nb= "; cin>>b;
if(f1(a)*Fd1(a)>0)
3
x=newton(a,eps,Nmax,&n,&Tf,i);
else
x=newton(b,eps,Nmax,&n,&Tf,i);
if(!Tf)
{
cout<<"Solutia cu precizia "<<eps<<" ="<<x<<endl;
cout<<"Numarul de iteratii = ";
cout<<n;
getch();
}
else
if(Tf==1)
{
cout<<"Nu are loc convergenta catre solutie\n"; getch();}
else
if(Tf==2)
{
cout<<"Precizia data nu poate fi atinsa dupa "<<Nmax<<"
pasi\n";
getch();

return 0;
}}

Metoda aproximării succesive


#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
double ec_apr(double x){double y= (1/25*x*x*x)+19/25 ;return y;}
float f1(float x)
{
return 1/25*x*x;
}
int main()
{ int a,b,k;
double c,d,x,fx;
system("cls");
cout<<"\n\n****** Iteratiile successive**** **";
k=0;
double y,x0;
cout<<"\nIntroduceti valoarea initiala x0:";cin>>x0;
y=x0;
do
{
x=y;
y=ec_apr(x);
k++;
4
}
while(fabs(y-x)>0.000001);
printf("\nSolutia ecuatiei este: %.6f",x);
cout<<"\nNr. iteratiilor: "<<k;
getch();
return 0;
}

Concluzie:

Efectuind aceasta lucrare de laborator am insusit metodele de


rezolvare a ecuatiilor algebrice si transcendente,obtinind aproximativ
aceeasi radacina. Totusi cea mai simpla mi s-a parut metoda grafica
deoarece nu necesita calcule si usor se poate determina intervalul in care
se gaseste solutia,dar cea mai eficienta pare a fi metoda Newton,luind in
consideratie ca a facut cele mai putine iteratii pina a fost gasita solutia.