Lab1 CO
February 25, 2017 | Author: Viktor Dobrovolschi | Category: N/A
Short Description
laborator CO...
Description
Ministerul Educaţiei 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: A verificat:
Păpușă Vitalie Bagrin V.
Chişinău 2015
Scopul lucrării: Studiul metodelor de optimizare nelineară fără restricţii Definirea şi utilizarea unor proceduri pentru minimizarea funcţiilor cu ajutorul metodei gradientului şi a metodelor de direcţii conjugate cu o eroare mai mica ca 10 5 Analiza rezultatelor obţinute, inclusiv stabilirea tipului minimului: local sau global. Compararea rezultatelor, luînd în considerare numărul de iteraţii, evaluările pentru funcţii şi gradient. Descrierea algoritmilor utilizaţi: metoda gradientului: Se x
alege
( k 1)
x
(k )
o
constantă
k f ( x
(k )
arbitrară
, şi se determină
z x ( k ) f ( x ( k ) ) ,
şi
)
Dacă condiţia f ( z ) f ( x ) f ( x ) , (0,1) , este indeplinită, atunci k şi procedura stopează. Altfel se fracţionează prin înmulţirea cu un număr arbitrar pozitiv şi 1 , k a.î. să fie asigurată descreşterea funcţiei conform condiţiei de la 2, şi începem iarăşi cu pasul 2. (k )
f(x,y)=ax12+2x1x2+bx12-2x1-3x2 f(x,y)=3*x12+2x1x2+x22-2x1-3x2
(k )
2
a=3; 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 double double double double double
f = func(a, b, x1, x2); grx1 = gx1(a, b, x1, x2); grx2 = gx2(a, b, x1, x2); norma = norm(grx1, grx2); z1 = Z1(x1, grx1, alfa); 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
View more...
Comments