Минимизация с градиентом и гессианом

В этом примере показано, как решить нелинейную задачу минимизации с явной трехдиагональной матрицей Гессиана H (x).

Проблема состоит в том, чтобы найти, что x минимизирует

f(x)=i=1n1((xi2)(xi+12+1)+(xi+12)(xi2+1)),(1)

где n = 1000.

Шаг 1: Запишите файл brownfgh.m, который вычисляет целевую функцию, градиент цели и разреженную трехдиагональную матрицу Гессиана.

Файл длинен, так не включен здесь. Просмотрите код с командой

type brownfgh

Поскольку brownfgh вычисляет градиент и значения Гессиана, а также целевую функцию, необходимо использовать optimoptions указать, что эта информация доступна в brownfgh, использование SpecifyObjectiveGradient и HessianFcn опции.

Шаг 2: Вызовите нелинейную стандартную программу минимизации с начальной точкой xstart.

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

Похожие темы