Lab1 CO

6
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: Păpușă Vitalie A verificat: Bagrin V.

description

laborator CO

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