Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

зелень / Лаба2(Игорь)

.doc
Скачиваний:
4
Добавлен:
20.02.2016
Размер:
1.51 Mб
Скачать

Министерство образования и науки,молодежи и спорта Украины

Государственное высшее учебное заведение Украинский государственный химики-технологический университет

Лабораторная работа №2 «Методы безусловной оптимизации функции

нескольких переменных»

Выполнил :

ст.группы 4-СКС-5 Пономарёв В.Н.

Проверил : Зеленцов Д.Г

Днепропетровск 2013

Задание для самостоятельной работы

Построить трех мерный график функции и найти минимум тремя методами

  1. Методом покоординатный спуск.

  2. Методом случайного поиска

  3. Одним из методов:

  • метод градиентного спуска (метод простых итераций)

  • метод наискорейшего спуска

  1. метод деформирующего многогранника на дополнительный бал.

Варіант 14

Текст программы:

#include <iostream.h>

#include <math.h>

#include <conio.h>

#include <stdlib.h>

double function(double x, double y)

{

return pow((x-2),4)+pow((x-2y),2);

};

double dX(double x)

{

return 6*x;};

double dY(double y)

{

return 10*y;

};

double norm(double x, double y)

{

return sqrt(dX(x)*dX(x)+dY(y)*dY(y));

};

void random_search ()

{

double min=100, x, y, x1, y1;

for (int i=0; i<=5000; i++)

{

x=(double)rand()/((double)RAND_MAX/0.1);

y=(double)rand()/((double)RAND_MAX/0.1);

if(function(x,y)<min)

{

min=function(x,y);

x1=x;

y1=y;

} }

cout<<"Metod sluchaynogo poiska:"<<endl;

cout<<"X="<<x1<<endl;

cout<<"Y="<<y1<<endl;

cout<<"F(X,Y)="<<function(x1,y1)<<endl<<endl;

}

void gradient()

{

double x1=0.11, y1=0.21, x=0.1, y=0.15, h=0.001;

while ((function(x1,y1)-function(x,y)) > 0.000001)

{

x1=x;

y1=y;

x=x-h*dX(x)/norm(x,y);

y=y-h*dY(y)/norm(x,y);

}

cout<<"Metod gradientnogo spuska:"<<endl;

cout<<"X="<<x<<endl;

cout<<"Y="<<y<<endl;

cout<<"F(X,Y)="<<function(x,y)<<endl<<endl;

}

void descent()

{

double x=-0.01, y=-0.025, h=0.0001, x1=0.1, y1=0.14;

while ((function(x1,y1)-function(x,y)) > 0.00001)

{

if (fabs(function(x,y)<function(x+h,y))) x=x-h;

while (function(x-h,y)<function(x,y))

{ x=x-h;}

if (fabs(function(x,y)>function(x+h,y))) x=x+h;

while (function(x-h,y)>function(x,y))

{ x=x+h;}

if (fabs(dY(y)<dY(y+h))) y=y-h;

while (function(x,y-h)<function(x,y))

{ y=y-h; }

if (fabs(dY(y)>dY(y+h))) y=y+h;

while (function(x,y-h)> function(x,y))

{ y=y+h;}

x1=x; y1=y;

}

cout<<"Metod pokoordinatnogo spuska:"<<endl;

cout<<"X="<<x<<endl;

cout<<"Y="<<y<<endl;

cout<<"F(X,Y)="<<function(x,y)<<endl;

}

void main()

{

clrscr();

random_search();

gradient();

descent();

getch();

}

Результат

Соседние файлы в папке зелень