fminuncВ этом примере показано, как использовать fminunc для решения задачи нелинейной минимизации
+ 2x2 + 1).
Чтобы решить эту двумерную задачу, напишите функцию, которая возвращает ). Затем вызовите подпрограмму неограниченной минимизации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
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