Lab1 CO
-
Upload
viktor-dobrovolschi -
Category
Documents
-
view
214 -
download
0
description
Transcript of Lab1 CO
Ministerul Educaiei al Republicii Moldova
Universitatea Tehnica a Moldovei
Facultatea Calculatoare Informatica si Microelectronica
Lucrare de laborator Nr.1
la Cercetari Operationale Tema: Structura mecanism de abstractizare A efectuat st.gr TI-131: Ppu Vitalie A verificat: Bagrin V.Chiinu 2015Scopul lucrrii: Studiul metodelor de optimizare nelinear fr restricii
Definirea i utilizarea unor proceduri pentru minimizarea funciilor cu ajutorul metodei gradientului i a metodelor de direcii conjugate cu o eroare mai mica ca
Analiza rezultatelor obinute, inclusiv stabilirea tipului minimului: local sau global.
Compararea rezultatelor, lund n considerare numrul de iteraii, evalurile pentru funcii i gradient.
Descrierea algoritmilor utilizai:
metoda gradientului:
Se alege o constant arbitrar , i se determin , i Dac condiia , , este indeplinit, atunci i procedura stopeaz.
Altfel se fracioneaz prin nmulirea cu un numr arbitrar pozitiv i , a.. s fie asigurat descreterea funciei conform condiiei de la 2, i ncepem iari cu pasul 2.
f(x,y)=ax12+2x1x2+bx12-2x1-3x2 a=3;f(x,y)=3*x12+2x1x2+x22-2x1-3x2 b=5;Metoda Gradientului:
Textul programului in limbajul C++#include
#include
using namespace std;
double func(double a, double b, double x1, double x2){
double f;
//a*x1^2 + 2*x1*x2 + b*x2^2 - 2*x1 - 3*x2
f = a*x1*x1 + 2 * x1*x2 + b*x2*x2 - 2 * x1 - 3 * x2;
return f;
}
double gx1(double a, double b, double x1, double x2){
double gx1;
//2*a*x1 + 2*x2 - 2
gx1 = 2*a*x1+2*x2-2;
return gx1;
}
double gx2(double a, double b, double x1, double x2){
double gx2;
//2*x1 + 2*b*x2 - 3
gx2 = 2*x1+2*b*x2-3;
return gx2;
}
double norm(double grx1, double grx2){
double norm;
norm = sqrt((grx1*grx1 + grx2*grx2));//*(grx1*grx1+grx2*grx2));
return norm;
}
double Z1(double x1, double grx1, double alfa){
double z1;
z1 = x1 - alfa*grx1;
return z1;
}
double Z2(double x2, double grx2, double alfa){
double z2;
z2 = x2 - alfa*grx2;
return z2;
}
double *rez(double a, double b, double x1, double x2, double alfa, double ro){
double f = func(a, b, x1, x2);
double grx1 = gx1(a, b, x1, x2);
double grx2 = gx2(a, b, x1, x2);
double norma = norm(grx1, grx2);
double z1 = Z1(x1, grx1, alfa);
double z2 = Z2(x2, grx2, alfa);
bool Cond = true;
while (Cond){
if (func(a, b, z1, z2) - func(a, b, x1, x2) alfa;
double eror ;
cout > eror;
double ro ;
cout > ro;
double *rz = new double[3];
cout > a;
cout > b;
cout