1

我在 MATLAB 中使用 IPOPT 来运行优化,我遇到了一些问题,它说:

 Hessian must be an n x n sparse, symmetric and lower triangular matrix 
with row indices in increasing order, where n is the number of variables.

在查看了我的 Hessian Matrix 之后,我发现它所抱怨的非对称元素非常接近,这里有一个例子:

H(k,j) =    2.956404205984938

H(j,k) =    2.956404205984939

显然,这些元素足够接近,并且存在一些数字舍入问题或类似问题。此外,当我以 H 作为输入调用 MATLAB 的 issymmetric 函数时,我得到了错误。有没有办法忘记这些非常小的对称差异?

更多信息:

我正在使用优化的 matlabFunction 来实际计算整个粗麻布 (H),然后在将其传递给 IPOPT 之前进行了一些后处​​理:

H = tril(H);
H = sparse(H);

tril 命令生成一个下三角矩阵,因此这些数字差异不应该发挥作用。因此,问题可能在于它抱怨 sparse 命令传回增加的列索引而不是增加行索引。有没有办法改变这一点,以便它在增加行索引时传回稀疏矩阵?

4

1 回答 1

2

如果H非常接近对称但不完全对称,并且您需要强制它完全对称,那么执行此操作的标准方法是说H = (H+H')./2.

于 2016-03-17T13:20:33.747 回答