Безусловная минимизация fminunc

Рассмотрите проблему нахождения множества значений [x 1, x 2], который решает

minxf(x)=ex1(4x12+2x22+4x1x2+2x2+1).(1)

Чтобы решить эту двумерную проблему, запишите файл, который возвращает значение функции. Затем вызовите стандартную программу безусловной минимизации fminunc.

Шаг 1: Запишите файл objfun.m.

Этот код поставляется с тулбоксом. Чтобы просмотреть, введите type objfun:

function f = objfun(x)
f = exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);

Шаг 2: Установка опций.

Установите опции использовать алгоритм 'quasi-newton'. Установите опции, потому что алгоритм 'trust-region' требует, чтобы целевая функция включала градиент. Если вы не устанавливаете опции, то, в зависимости от вашей версии MATLAB®, fminunc может выдать предупреждение.

options = optimoptions(@fminunc,'Algorithm','quasi-newton');

Шаг 3: Вызовите fminunc использование опций.

x0 = [-1,1]; % Starting guess
[x,fval,exitflag,output] = fminunc(@objfun,x0,options);

Это производит следующий вывод:

Local minimum found.

Optimization completed because the size of the gradient is less
than the default value of the optimality tolerance.

Просмотрите результаты, включая меру по оптимальности первого порядка в структуре output.

x,fval,exitflag,output.firstorderopt

x =

    0.5000   -1.0000


fval =

   3.6609e-16


exitflag =

     1


ans =

   7.3704e-08

exitflag говорит, сходился ли алгоритм. exitflag = 1 означает, что локальный минимум был найден. Значения exitflags даны на страницах ссылки на функцию.

Структура output предоставляет больше подробную информацию об оптимизации. Для fminunc это включает количество итераций в iterations, количество функциональных оценок в funcCount, размера последнего шага в stepsize, мере оптимальности первого порядка (который в этом неограниченном случае является нормой бесконечности градиента в решении) в firstorderopt, типе алгоритма, используемого в algorithm и выходном сообщении (причина остановленный алгоритм).

Связанные примеры

Больше о