Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.1
la Metode si modele de calcul
A efectuat:
st. gr. TI-162
Rbac Dumitru
A verificat:
Veronica Andrievschi-Bagrin
Chiinu - 2017
Lucrarea de laborator nr.1
Varianta 3:
a = 1; b = 4;
f(x1x2) = pow(x1,2)+(2*x1*x2)+(4*pow(x2,2))-(2*x1)-(3*x2)
Mersul lucrrii:
Pasii algoritmului:
1) Alegem un punct arbitrar initial cu coordonatele : x1 , x2;
2) Aflam derivata functiei in punctul x1 , x2;
Analiza datelor:
#include <iostream>
#include<stdio.h>
#include <conio.h>
#include <math.h>
using namespace std;
int main (void)
{
float a,b;
float eps=0.00001, bet, sig=0.006;
float X[2], D[2], alph=1, A[2], Da[2];
int i;
float yx, ya, dx, da;
cout << "\tCalcularea punctului de minim al functiei\n\n\tMetoda gradientului
prin fractionarea pasului\n\n";
cout << "Alegem un punct 0 :" << endl;
for(i=0;i<2;i++)
{
cout << "\nX" << i+1 << " : ";
cin >> X[i];
}
cout << "\nAlegeti fractionarea pasului (<1) : ";
cin >> bet;
while(1)
{
D[0]= (2*X[0]) + (2*X[1]) - 2;
D[1]= (2*X[0]) + (8*X[1]) - 3;
dx=sqrt(pow(D[0],2)+pow(D[1],2));
if(dx<=eps)
{
cout << "\nPunctul de minim este : " << endl;
for(i=0;i<2;i++)
{
cout << "X" << i << "=" << X[i] << endl;
}
break;
}
while(2)
{
2
cout << "Calcularea urmatorului punct :" << endl;
for(i=0;i<2;i++)
{
A[i]=X[i];
}
Da[0]= (10*A[0]) + (2*A[1]) - 2;
Da[1]= (2*A[0]) + (6*A[1]) - 3;
da=sqrt(pow(Da[0],2)+pow(Da[1],2));
for(i=0;i<2;i++)
{
X[i]+=-(alph*Da[i]);
cout << "X" << i << "=" << X[i] << endl;
}
yx=pow(X[0],2)+(2*X[0]*X[1])+(4*pow(X[1],2))-(2*X[0])-(3*X[1]);
ya=pow(A[0],2)+(2*A[0]*A[1])+(4*pow(A[1],2))-(2*A[0])-(3*A[1]);
if(yx-ya<=sig*alph*pow(da,2))
{
cout << "\nAm gasit un posibil punct de minim." << endl;
break;
}
alph*=bet;
cout << "S-a indeplinit fractionarea pasului.\n\nAlfa = " << alph << endl;
}
}
return 0;
}
Rezultatele obtinute:
x1 = 0.8(3) , x2 = 0.1(6)