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
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