Этот пример показывает, как решить нелинейную проблему минимизации с явной трехдиагональной матрицей Гессиана H (x).
Проблема состоит в том, чтобы найти, что x минимизирует
(1) |
где n = 1000
.
Файл длинен, так не включен здесь. Просмотрите код с командой
type brownfgh
Поскольку brownfgh
вычисляет градиент и значения Гессиана, а также целевую функцию, необходимо использовать optimoptions
, чтобы указать, что эта информация доступна в brownfgh
, с помощью опций HessianFcn
и SpecifyObjectiveGradient
.
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