В этом примере показано, как решить нелинейную задачу минимизации с явной трехдиагональной матрицей Гессиана H (x).
Проблема состоит в том, чтобы найти, что x минимизирует
(1) |
где n = 1000
.
Файл длинен, так не включен здесь. Просмотрите код с командой
type brownfgh
Поскольку brownfgh
вычисляет градиент и значения Гессиана, а также целевую функцию, необходимо использовать optimoptions
указать, что эта информация доступна в brownfgh
, использование SpecifyObjectiveGradient
и HessianFcn
опции.
n = 1000; xstart = -ones(n,1); xstart(2:2:n,1) = 1; options = optimoptions(@fminunc,'Algorithm','trust-region',... 'SpecifyObjectiveGradient',true,'HessianFcn','objective'); [x,fval,exitflag,output] = fminunc(@brownfgh,xstart,options);
Эти 1 000 переменных задач решены приблизительно в 7 итерациях и 7 итерациях метода сопряженных градиентов с положительным exitflag
указание на сходимость. Итоговое значение функции и мера оптимальности в решении x
оба близко к нулю. Для fminunc
, оптимальность первого порядка является нормой по бесконечности градиента функции, которая является нулем в локальном минимуме:
fval,exitflag,output.firstorderopt fval = 2.8709e-17 exitflag = 1 ans = 4.7948e-10