matlab - 粗麻布对称性和稀疏命令的非常小的数值问题

标签 matlab hessian-matrix ipopt

我在 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 issymmetry 函数时,会得到 false。有没有办法忘记这些非常小的对称性差异?

更多信息:

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

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

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

最佳答案

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

关于matlab - 粗麻布对称性和稀疏命令的非常小的数值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050205/

相关文章:

matlab - 从matlab中的单元格数组中删除包含零的行

python-2.7 - 如何从pyomo的ipopt界面中找到违反了哪个约束?

r - 使用 R 进行 ARIMA 建模的奇怪案例

python - 如何在python中实现负二项式损失函数以用于轻型GBM?

python - 如何在 Linux 上使用 ipopt 优化器和 pyomo

intel-mkl - 将 Ipopt 与 MKL 链接,MUMPS 的问题

function - 定义具有三个变量的分段函数

matlab - Matlab 中的 a+ 文件权限

image - 将 RGB 图像转换为 CMY