АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Метод Хука и Дживса

Читайте также:
  1. A. Выявление антигенов вируса в мокроте методом ИФА.
  2. D. Генно-инженерным методом
  3. F. Метод, основанный на использовании свойства монотонности показательной функции .
  4. FAST (Методика быстрого анализа решения)
  5. I этап Подготовка к развитию грудобрюшного типа дыхания по традиционной методике
  6. I. 2.1. Графический метод решения задачи ЛП
  7. I. 3.2. Двойственный симплекс-метод.
  8. I. ГИМНАСТИКА, ЕЕ ЗАДАЧИ И МЕТОДИЧЕСКИЕ ОСОБЕННОСТИ
  9. I. Иммунология. Определение, задачи, методы. История развитии иммунологии.
  10. I. Метод рассмотрения остатков от деления.
  11. I. Методические основы
  12. I. Методические основы оценки эффективности инвестиционных проектов

Метод Хука и Дживса осуществляет два типа поиска - исследующий поиск и поиск по образцу. Первые две итерации процедуры показаны на рисунке.

1-поиск по образцу; 2- исследующий поиск вдоль координатных осей.

При заданном начальном векторе x1 исследующий поиск по координатным направлениям приводит в точку x2. Последующий поиск по образцу в направлении x1- x2 приводит в точку y. Затем исследующий поиск, начинающийся из точки y, дает точку x3. Следующий этап поиска по образцу вдоль направления x3- x2 дает y*. Затем процесс повторяется.

Фрагментыисходногокода.

 

#include"stdafx.h"

usingnamespace std;

 

typedeffloat coord[2];

constfloat eps=0.0001;

coord xf;

float ff;

 

void prisv(coord x1,coord x2)

{

x1[0]=x2[0];

x1[1]=x2[1];

}

 

float func(float x1,float x2)

{

float y;

y=100*(x2-x1*x1)*(x2-x1*x1)+(1-x1)*(1-x1);

return y;

}

 

void issled(coord xb0, float fb, float h)

{

float ft;

coord xk;

 

prisv(xf,xb0);

prisv(xk,xb0);

xk[0]+=h; //dvizhenie vpravo po osi x1;

ff=func(xk[0],xk[1]);

if (ff<fb)

{

prisv(xf,xk);

xk[1]+=h; //vverh

ft=func(xk[0],xk[1]);

if (ft<fb)

{

ff=ft;

prisv(xf,xk);

}

else

{

xk[1]-=2*h; //vniz

ft=func(xk[0],xk[1]);

if (ft<fb)

{

ff=ft;

prisv(xf,xk);

}

}

}

else

{

prisv(xk,xb0);

xk[0]-=h;//dvizhenie vlevo po osi x1

ff=func(xk[0],xk[1]);

if (ff<fb)

{

prisv(xf,xk);

xk[1]+=h; //vverh

ft=func(xk[0],xk[1]);

if (ft<fb)

{

ff=ft;

prisv(xf,xk);

}

else

{

xk[1]-=2*h; //vniz

ft=func(xk[0],xk[1]);

if (ft<fb)

{

ff=ft;

prisv(xf,xk);

}

}

}

}

}

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"Russian");

coord xb[2], p;

float h, fb[2], fp;

h=10;

xb[0][0]=3;

xb[0][1]=0;

while (h>eps)

{

fb[0]=func(xb[0][0],xb[0][1]);

issled(xb[0],fb[0],h);

while ((h>eps) && (xb[0][0]==xf[0]) && (xb[0][1]==xf[1]))

{

h=h/2;

issled(xb[0],fb[0],h); //issled poisk do teh por poka ne umenshim

}

if (xb[0]!=xf) //xf-new basic point; ff - znachenie v xf;

{

do

{

prisv(xb[1],xf);

fb[1]=ff;

p[0]=xb[1][0]+(xb[1][0]-xb[0][0]);

p[1]=xb[1][1]+(xb[1][1]-xb[0][1]);

fp=func(p[0],p[1]);

issled(p,fp,h);

if (p!=xf)

prisv(xb[0],xb[1]);

}

while (ff<fb[1]);

prisv(xb[0],xb[1]);

}

}

cout<<"значение минимума: "<<fb[1]<<"\n"<<"Точка минимума: "<<xb[1][0]<<" "<<xb[1][1];

getch();

return 0;

}

 


1 | 2 | 3 | 4 | 5 | 6 | 7 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)