Hessian 对称性和稀疏命令的非常小的数值问题
Very small numerical issues with hessian symmetry and sparse command
我正在使用 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 矩阵后,我发现它所抱怨的非对称元素非常接近,这里有一个例子:
H(k,j) = 2.956404205984938
H(j,k) = 2.956404205984939
显然这些元素足够接近并且存在一些数字舍入问题或类似问题。此外,当我以 H 作为输入调用 MATLAB 的 issymmetric 函数时,我得到 false。有没有办法忘记这些非常小的对称性差异?
更多信息:
我正在使用优化的 matlabFunction 来实际计算整个 hessian (H),然后在将其传递给 IPOPT 之前我做了一些后处理:
H = tril(H);
H = sparse(H);
tril 命令生成下三角矩阵,因此这些数字差异不应该起作用。因此,问题可能是它抱怨稀疏命令传回增加的列索引而不是增加行索引。有没有办法改变它,以便它在增加的行索引中传回稀疏矩阵?
如果 H
非常接近对称但不完全对称,并且您需要强制它完全对称,则标准方法是说 H = (H+H')./2
.
我正在使用 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 矩阵后,我发现它所抱怨的非对称元素非常接近,这里有一个例子:
H(k,j) = 2.956404205984938
H(j,k) = 2.956404205984939
显然这些元素足够接近并且存在一些数字舍入问题或类似问题。此外,当我以 H 作为输入调用 MATLAB 的 issymmetric 函数时,我得到 false。有没有办法忘记这些非常小的对称性差异?
更多信息:
我正在使用优化的 matlabFunction 来实际计算整个 hessian (H),然后在将其传递给 IPOPT 之前我做了一些后处理:
H = tril(H);
H = sparse(H);
tril 命令生成下三角矩阵,因此这些数字差异不应该起作用。因此,问题可能是它抱怨稀疏命令传回增加的列索引而不是增加行索引。有没有办法改变它,以便它在增加的行索引中传回稀疏矩阵?
如果 H
非常接近对称但不完全对称,并且您需要强制它完全对称,则标准方法是说 H = (H+H')./2
.