【问题标题】:Eigen matrix right division equivalent特征矩阵右除等价
【发布时间】:2016-12-10 15:35:47
【问题描述】:

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

在本征中?

【问题讨论】:

  • 您可以转置所有内容以得到相同的形式。不过,不确定它是否会比计算倒数更高效。
  • 对大矩阵取逆是求解AxC=BCxA=B 矩阵方程的低效方法。

标签: c++ eigen


【解决方案1】:

目前最有效的方法是将方程式重写为

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 将以最有效的方式对此进行评估。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2018-07-10
    • 1970-01-01
    • 2011-09-29
    • 2022-01-23
    相关资源
    最近更新 更多