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