Поставка fmincon с гессианом
Я пытаюсь помочь fmincon сойтись быстрее, предоставив вектор градиента и матрицу Гессе. Я использую алгоритм внутренней точки, и я понимаю, что в таком случае я должен передать Hessian, используя вызов другой функции, которая назначена HessFcn моих OPTIOINS. Я также понимаю, что гессиан для fmincon является вторыми производными лагранжиана, как описано здесь в уравнении 14-1. Я должен использовать следующее определение функции, чтобы иметь доступ к моим параметрам подбора и лямбда при расчете гессиана
hessian = hessianfcn(x, lambda)
С этого момента у меня возникли некоторые трудности с выяснением процедуры. Хотя у моей задачи есть линейные ограничения и верхняя и нижняя границы, лямбда-структура пуста, т. Е. Всякий раз, когда я пытаюсь получить к ней доступ из hessianfcn, она возвращает:
lambda =
eqnonlin: [0x1 double]
ineqnonlin: [0x1 double]
Есть идеи, как решить эту проблему?
PS Я следую приведенным здесь инструкциям, которые работают, пока я намеренно не заменю нелинейное ограничение на некоторые случайные линейные ограничения, а затем у меня снова возникнет та же проблема (пустая лямбда-структура).
1 ответ
Лямбда - это не прямое значение, а структура, в которой вы можете получить доступ ко многим данным. Matlab говорит вам, что в лямбде есть 2 значения. Выберите то, что вам нужно
lambda.eqnonlin(1)
lambda.ineqnonlin(1)
Вот пример использования предоставленного пользователем гессиана