exponenta event banner

Неограниченная минимизация с помощью fminunc

В этом примере показано, как использовать fminunc для решения задачи нелинейной минимизации

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

Чтобы решить эту двумерную задачу, напишите функцию, которая возвращает f (x). Затем вызовите подпрограмму неограниченной минимизацииfminunc начиная с начальной точки x0 = [-1,1].

Вспомогательная функция objfun в конце этого примера вычисляет f (x).

Чтобы найти минимум f (x), установите начальную точку и вызовитеfminunc.

x0 = [-1,1];
[x,fval,exitflag,output] = fminunc(@objfun,x0);
Local minimum found.

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

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

disp(x)
    0.5000   -1.0000
disp(fval)
   3.6609e-15
disp(exitflag)
     1
disp(output.firstorderopt)
   1.2284e-07

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

output содержит более подробную информацию об оптимизации. Для fminuncструктура включает в себя:

  • output.iterations, количество итераций

  • output.funcCount, количество оценок функций

  • output.stepsize, окончательный размер шага

  • output.firstorderopt, мера оптимальности первого порядка (которая в этом неограниченном случае является бесконечной нормой градиента в решении)

  • output.algorithm, тип используемого алгоритма

  • output.message, причина остановки алгоритма

Вспомогательная функция

Этот код создает 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);
end

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

Подробнее