在我的算法中,我采用了稀疏矩阵逆运算,并通过使用 QR 分解方法的 A*x=b 方法来解决它。在 Matlab 上,QR 操作运行良好。
但是,当我尝试使用 Eigen 库将代码转换为 C++ 时,我没有得到相同的答案。在某些情况下,与 Matlab 中的结果相比,向量 x 的每个元素都有一些值的偏移。然而,导致移位的这个值在向量中的所有元素中都是恒定的。
一瞥我所做的事情:
Eigen::SparseMatrix<float> A(m, n);
Eigen::VectorXf b;
Eigen::SparseQR<Eigen::SparseMatrix<float>, Eigen::COLAMDOrdering<int>> solver;
solver.compute(A);
Eigen::VectorXf x = solver.solve(b);
x 是我的最终向量,其中包含 A.inverse()*b 的结果,不是吗?
此外,我试图将它作为一个完整的矩阵来解决,但与 Matlab 相比,在 C++ 上仍然产生了不同的答案。
这里有没有人遇到过类似的问题?如果是,欢迎任何帮助或指点。另一方面,如果我的理解有问题,也感谢任何纠正。
谢谢。