如果我在 Matlab 中编写
A = B*inv(C)
(A、B 和 C 是方阵),我收到一条警告,矩阵求逆应该替换为矩阵“右除法”(因为在数值上更稳定和准确),例如
A = B/C
在我的 Eigen C++ 项目中,我有以下代码:
Eigen::Matrix<double> A = B*(C.inverse());
我想知道是否有一个等效的替代品来代替 Eigen 中的矩阵求逆,类似于上面提到的 Matlab 中的矩阵求逆?
我知道矩阵“左除”可以通过求解方程组来表示,例如
A = inv(C)*B
但是呢
A = C*inv(B)
在 Eigen 中?
最佳答案
目前最有效的方法是将方程重写为
A^T = inv(C^T) * B^T
A = (inv(C^T) * B^T)^T
可以在 Eigen 中实现为
SomeDecomposition decompC(C); // decompose C with a suiting decomposition
Eigen::MatrixXd A = decompC.transpose().solve(B.transpose()).transpose();
有were/are plans ,最终,一个人可以写
A = B * decompC.inverse();
Eigen 将以最有效的方式对此进行评估。
关于c++ - Eigen 矩阵右除等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41077190/