c++ - Eigen 矩阵右除等价

标签 c++ eigen

如果我在 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/

相关文章:

CMake找不到Eigen3

c++ - Eigen:将实数和虚数 MatrixXd 映射到 MatrixXcd

c++ - 如何在 cvCvColor 之后获取对 YUV 组件的引用?

c++ - 内存效率 - 循环中的 Eigen::VectorXd

c++ - 如何设计Classifier接口(interface)、不同的分类器和数据存储?

c++ - 使用 std::map 时提供默认值的函数

c++ - 对 Eigen QR 分解感到困惑

c++11 - 向量的分段平方,C++ Eigen 中两个向量的分段乘积

c++ - ace register_handler 失败

c++ - 我的数组的长度是多少?