用Hessian提供fmincon

时间:2015-03-11 12:58:52

标签: matlab lambda hessian-matrix

我试图通过提供梯度向量和Hessian矩阵来帮助fmincon更快地收敛。我正在使用内点算法,我意识到在这种情况下,我必须使用调用另一个函数来提供Hessian,该函数被分配给我的OPTIOINS的HessFcn。我也意识到Hminian for fmincon是拉格朗日的二阶导数,如公式14-1中here所述。我应该使用以下函数定义来计算粗体

时访问我的拟合参数和lambda
hessian = hessianfcn(x, lambda)

从这一点开始,我在确定程序时遇到了一些困难。虽然我的问题有线性约束和上限和下限,但lambda结构是空的,即每当我尝试从hessianfcn访问它时,它返回:

lambda = 
        eqnonlin: [0x1 double]
      ineqnonlin: [0x1 double]

知道如何解决这个问题吗?

P.S。我遵循here给出的指令,直到我故意用一些随机线性约束替换非线性约束,然后我将再次遇到同样的问题(空lambda结构)。

1 个答案:

答案 0 :(得分:1)

lambda不是直接值,而是可以访问许多信息的结构。 Matlab告诉你目前lambda中有2个值。

选择你需要的东西
lambda.eqnonlin(1)
lambda.ineqnonlin(1)

Here是使用用户提供的粗麻布

的示例