fminunc
В этом примере показано, как использовать fminunc
чтобы решить нелинейную задачу минимизации
Чтобы решить эту двумерную задачу, напишите функцию, которая возвращает . Затем активируйте без ограничений стандартной программы минимизации fminunc
начиная с начальной точки x0 = [-1,1]
.
Функция помощника objfun
в конце этого примера вычисляется .
Чтобы найти минимум , установите начальную точку и вызовите 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
The exitflag
выход указывает, сходится ли алгоритм. exitflag
= 1 означает fminunc
находит локальный минимум.
The 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