RAPORT
la lucrarea de laborator nr. 1
Chişinău – 2019
`
Obiective:
-
Studierea metodelor de optimizare neliniare fără restricții
-
Definirea și utilizarea unor proceduri pentru minimizarea funcțiilor cu ajutorul
metodei gradientului și a metodelor de direcție conjugată cu eroarea mai mică de
ε = 10-5
-
Analiza rezultatelor obținute, stabilirea tipului minimului, local sau global
-
Să se compare rezultatele luând în considerare numărul de iterații, evaluării pentru
funcție și gradient
Listingul programului:
#include <iostream>
#include <math.h>
#define MAX_ITER 5
using namespace std;
int main()
{
float alpha = 1;
float beta = 0.5;
float delta = 0.06;
float eps = 0.00001;
float x[MAX_ITER][2], z[2], gradient[2], norma;
int pos = 0, pas = 0, it;
x[pos][0]=0; x[pos][1]=0;
while (pas<MAX_ITER)
{
system("CLS");
it = 1;
gradient[0] = gradientCalc(x[pos][0],x[pos][1],true);
gradient[1] = gradientCalc(x[pos][0],x[pos][1],false);
2
`
while (true) {
cout<<endl<<it<<" pas"<<endl<<"\talpha = "<<alpha<<endl;
z[0]=x[pos][0]-alpha*gradient[0];
z[1]=x[pos][1]-alpha*gradient[1];
cout<<"\tz = ("<<z[0]<<", "<<z[1]<<")"<<endl;
if (f(z[0],z[1])-f(x[pos][0],x[pos][1])<=-alpha*delta*pow(norma,2))
{
cout<<"\tf(z) = "<<f(z[0],z[1])-f(x[pos][0],x[pos][1])<<" <= "<<-
alpha*delta*pow(norma,2)<<endl;
cout<<endl<<endl<<"S-a confirmat comparatia, trecem la x"<<pos+1<<endl;
pos++;
x[pos][0]=z[0];
x[pos][1]=z[1];
break;
} else {
cout<<"\tf(z) = "<<f(z[0],z[1])-f(x[pos][0],x[pos][1])<<" > "<<-
alpha*delta*pow(norma,2)<<endl;
alpha*=beta;
}
it++;
}
getchar();
pas++;
}
return 0;
}
Concluzie:
3
`