Lab1 CO

February 25, 2017 | Author: Viktor Dobrovolschi | Category: N/A
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF