Referat: Ministerul Educaţiei Al Republicii Moldova Universitatea Tehnică A Moldovei

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

Descărcați ca docx, pdf sau txt
Descărcați ca docx, pdf sau txt
Sunteți pe pagina 1din 8

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Referat

la disciplina: Metode numerice

Lucrarea de laborator nr. 1

Varianta 4

Elaborat: Studentul grupei SI-111


Cebanu Ghennadi

Verificat: Asistent universitar


Mihail Coscodanu

Chiinu 2012
Sarcina 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) Se se determine o rdcin real a ecuaiei date cu ajutorul
metodei njumtirii intervalului cu eroare mai mic dect =10 -2.
3) S se precizeze rdcina absolut cu exactitatea =10 -6, utiliznd:
metoda aproximaiilor succesive;
metoda tangentelor (Newton);
metoda secantelor.
4) S se compare rezultatele lund n consideraie numrul de iteraii,
evalurii pentru funcii i derivat.
4.x3-25x+19=0

Rezolvarea lucrrii:

4. x3-25x+19=0

x3=23x-19
x=0 => y=-19,
x=1 => y=4,

Aproximaiile succesive:
F(x)=0, x=(x)
3 2 3
x 19 x 19 x 19
x=
25
; ( x ) = 25
=
25 25
;

2 2
3 x
( x )=
25
; | (x)|=325x <1

x 2<
25
3
;
25
3
< x<
25
3

x 019 19
x 0=0 ; x 1= =
25 25
3
19
3
x 19 25
x 2= = + =
( )
19 74088(25) 19 17040843111696
+ = =12.209
25 25 25 25 12167 25 279841

Codul programului:
#include <iostream>
#include <dos.h>
#include <cmath>
#include <conio.h>
#include <stdlib.h>
#define eps1 0.01
#define eps2 0.000001
using namespace std;

float f(float a, float b, float c, float d, float x)


{
float f;

f=a*x*x*x+b*x*x+c*x+d;

return f;
}

float F1(float a, float b, float c, float d, float x) //f'


{
float f;

f=3*x*x+c;
return f;
}

void metinjint(float A, float B, float eps, float a, float b, float c, float d)


{
float S, D, fx, x;
int k;

S=A;

if(f(a,b,c,d,A)<0) S=B;
D=A+B-S;
k=0;

do {
x=S+(D-S)/2;
k++;
fx=f(a,b,c,d,x);
if(fx==0) exit(1);
if(fx>0) S=x;
else D=x;
} while((fabs(S-D))>eps);
cout <<"\n\tMetoda injumatatirii intervalului ";
cout <<"\nSolutia = " <<x;
cout <<"\nNumarul de iteratii = " <<k <<"\n";
}

float radical(float x)
{
float r=(float)1/3;
float p=3*x*x-25;

return exp(r*log(p));
}

void metaprsuc(float x0, float eps, int Nmax, float a, float b, float c, float
d)
{
float x1, y, x, h, u;
int k=0;
u=1/3;
y=x0;

do {
x=y;
h=3*x*x+c;
y=pow(h, u);
k++;
} while(fabs(y-x)>eps && k<Nmax);
x1=x;
cout <<"\n\tMetoda aproximatiilor succesive";
cout <<"\nSolutia = " <<x1;;
cout <<"\nNumarul de iteratii = " <<k <<"\n";
}

void metnew(float x0, float eps, int Nmax, float a, float b, float c, float
d)
{
float x1, x, y, d0=1e30, d1;
int k, Ier;
x=x0;
k=0;
Et: ;

x1=x-f(a,b,c,d,x)/F1(a,b,c,d,x);
d1=fabs(x1-x);

if(d1<eps) {
Ier=0;
}
else {
if(d1<d0) {
if(k>Nmax) {
Ier=2;
}
else k++;
x=x1;
d0=d1;
goto Et;
}
else {
Ier=1;
}
}
cout <<"\n\tMetoda Newton: ";
cout <<"\nSolutia = " <<x;
cout <<"\nNumarul de iteratii = " <<k <<"\n";
}

void metsec(float A, float B, float eps, int Nmax, float a, float b, float c,
float d)
{
float FA, FB, FX, x, xt;
int Num=0;

FA=f(a,b,c,d,A);
FB=f(a,b,c,d,B);
x=A-(B-A)*FA/(FB-FA); //calculul solutiei initiale
FX=f(a,b,c,d,x);

if(FA*FX<=0) {
xt=A;
do {
x=x-(x-A)*FX/(FX-FA); // calculul dupa form coardelor
FX=f(a,b,c,d,x);
xt=xt-f(a,b,c,d,xt)/F1(a,b,c,d,xt); // calculul dupa formula
tangentelor
Num++;
} while(fabs(x-xt)>eps && Num<Nmax);
}

else {
xt=B;
do {
xt=xt-f(a,b,c,d,xt)/F1(a,b,c,d,xt); //calculul dupa formula
tangentelor
Num++;
} while(fabs(x-xt)<eps && Num<Nmax);
}

cout <<"\n\tMetoda secantelor: ";


cout <<"\nSolutia = " <<x;
cout <<"\nNumarul de iteratii = " <<Num <<"\n";
}

int main()
{
float A, B, eps, x, a, b, c, d;
int Nmax, temp;
cout <<"Introduceti coeficientii ecuatiei: \n";
cout <<"a = ";
cin >>a;
cout <<"b = ";
cin >>b;
cout <<"c = ";
cin >>c;
cout <<"d = ";
cin >>d;

cout <<"\nIntroduceti intervalul [a,b]: ";


cin >>A >>B;

cout <<"\nIntroduceti epsilon: ";


cin >>eps;

cout <<"\nIntroduceti numarul maximal de iteratii: ";


cin >>Nmax;
cout <<"\n\n";
metinjint(A, B, eps, a, b, c, d);
metaprsuc(A, eps, Nmax, a, b, c, d);
metnew(A, eps, Nmax, a, b, c, d);
metsec(A, B, eps, Nmax, a, b, c, d);
getch();

return 0;
}

Rezultatele obinute:
Concluzia:
n aceast lucrare de laborator ne-am familiarizat cu metodele de aflare a
rdcinilor a ecuaiilor i am analizat numrul operaiilor la care a fost supus
programul pentru aflarea soluiei n fiecare metod.

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