Этот пример показывает, как решить нелинейную проблему минимизации с явной трехдиагональной матрицей Гессиана 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