我试图通过提供梯度向量和Hessian矩阵来帮助fmincon更快地收敛。我正在使用内点算法,我意识到在这种情况下,我必须使用调用另一个函数来提供Hessian,该函数被分配给我的OPTIOINS的HessFcn。我也意识到Hminian for fmincon是拉格朗日的二阶导数,如公式14-1中here所述。我应该使用以下函数定义来计算粗体
时访问我的拟合参数和lambdahessian = hessianfcn(x, lambda)
从这一点开始,我在确定程序时遇到了一些困难。虽然我的问题有线性约束和上限和下限,但lambda结构是空的,即每当我尝试从hessianfcn访问它时,它返回:
lambda =
eqnonlin: [0x1 double]
ineqnonlin: [0x1 double]
知道如何解决这个问题吗?
P.S。我遵循here给出的指令,直到我故意用一些随机线性约束替换非线性约束,然后我将再次遇到同样的问题(空lambda结构)。
答案 0 :(得分:1)
lambda不是直接值,而是可以访问许多信息的结构。 Matlab告诉你目前lambda中有2个值。
选择你需要的东西lambda.eqnonlin(1)
lambda.ineqnonlin(1)
Here是使用用户提供的粗麻布
的示例