1

我试图通过提供梯度向量和 Hessian 矩阵来帮助 fmincon 更快地收敛。我正在使用内点算法,并且我意识到在这种情况下,我必须使用对分配给我的 OPTIOINS 的 HessFcn 的另一个函数的调用来提供 Hessian。我还意识到 fmincon 的 Hessian 是拉格朗日的二阶导数,如等式14-1 中所述。我应该在计算粗麻布时使用以下函数定义来访问我的拟合参数和 lambda

hessian = hessianfcn(x, lambda)

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

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

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

PS 我按照这里给出的说明进行操作,直到我故意用一些随机线性约束替换非线性约束,然后我将再次遇到同样的问题(空 lambda 结构)。

4

1 回答 1

1

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

lambda.eqnonlin(1)
lambda.ineqnonlin(1)

是使用用户提供的 hessian 的示例

于 2015-07-12T10:12:19.937 回答