我试图通过提供梯度向量和Hessian矩阵来帮助fmincon更快地收敛。我正在使用内点算法,我意识到在这种情况下,我必须使用对另一个函数的调用来提供Hessian,该函数被分配给我的OPTIOINS的HessFcn。我还意识到fmincon的黑森函数是拉格朗日函数的二阶导数,如方程14-1中描述的here。在计算hessian函数时,我应该使用以下函数定义来访问我的拟合参数和lambda
hessian = hessianfcn(x, lambda)从这一点上来说,我有一些困难来弄清楚程序。虽然我的问题有线性约束和上下限,但lambda结构是空的,即每当我试图从hessianfcn访问它时,它都会返回:
lambda =
eqnonlin: [0x1 double]
ineqnonlin: [0x1 double]你知道怎么解决这个问题吗?
附注:我正在按照here给出的说明进行操作,直到我故意用一些随机的线性约束替换非线性约束,然后我又会遇到同样的问题(空的λ结构)。
发布于 2015-07-12 18:12:20
lambda不是一个直接的值,而是一种可以访问许多信息的结构。Matlab告诉你,当前在lambda中有两个值。通过以下方式选择您需要的
lambda.eqnonlin(1)
lambda.ineqnonlin(1)Here是使用用户提供的hessian的一个示例
https://stackoverflow.com/questions/28987238
复制相似问题