Поставка 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)

Вот пример использования предоставленного пользователем гессиана

Другие вопросы по тегам