Пособие в_3_20
.pdf
xh = x3; nh = 3;
end
%самая низкая точка F Fmin = min([F1 F2 F3]); switch Fmin
case F1
xl = x1; case F2
xl = x2; case F3
xl = x3;
end
%Центр тяжести, спроецированный на ребро симплек-
са,
%относительно которого выполняется отображение
x4 = 1./n .* (x1+x2+x3-xh); plot(x4(1), x4(2), 'kh'); hold on; F4 = F(x4);
% проверка критерия достаточной малости симплекса if (((F1-F4)^2+(F2-F4)^2+(F3-F4)^2)/3 < TolFun),
disp('Сходимость достигнута');
sprintf('x1 опт = %f, x2 опт = %f, Fmin = %f', xl(1), xl(2), Fmin)
break;
end
% отображаем точку
x5 = x4 + alpha*(x4-xh); plot(x5(1), x5(2), 'ms'); hold on;
plot([xh(1) x5(1)], [xh(2) x5(2)], '--') F5 = F(x5);
sprintf('ЦФ в точке х5 %f', F(x5))
if (F5<F(xh)), % в новой точке получено меньшее значение ЦФ
x(:,nh) = x5;
else % сжатие симплекса
if (x1 ~= xl), x(:,1) = xl + 0.5*(x1 - xl); end if (x2 ~= xl), x(:,2) = xl + 0.5*(x2 - xl); end
11
if (x3 ~= xl), x(:,3) = xl + 0.5*(x3 - xl); end end
x1 = x(:,1);
x2 = x(:,2);
x3 = x(:,3); end
Задание для самостоятельного решения:
Минимизировать целевую функцию F x в окрестностях точек x0 5; 5 ; x0 5; 5 ; x0 5; 5 .
12
