Eigen 库中的反转对角矩阵对象(C++)

问题描述 投票:0回答:1

我试图从矩阵中提取对角线,然后使用 C++ 中的 Eigen 库将其反转。这应该是按分量求逆,并且计算得相当快。然而以下似乎无法编译:

Eigen::MatrixXd A = /* some matrix */;
Eigen::Diagonal<Eigen::MatrixXd> D = A.diagonal().;
Eigen::MatrixXd D_inv = D.inverse();

Diagonal 对象上似乎没有“inverse()”方法。我得到的确切错误是:

Undefined symbols for architecture x86_64:
  "Eigen::MatrixBase<Eigen::Diagonal<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0> >::inverse() const"

有没有一种简单的方法来计算倒数,而无需手动执行?

c++ eigen diagonal
1个回答
0
投票

Diagonal 类型仅表示对角线上值的视图,实际上并不构造新矩阵。对角矩阵可以通过

asDiagonal()
方法从特征对角对象获得。这是一个完整的例子:

#include <Eigen/Dense>
int main() {
    Eigen::Matrix3d A {{-1, 1, 1}, {1, -1, 1}, {1, 1, 1}};
    const auto diagonalObject = A.diagonal();
    const auto diagonalMatrix = diagonalObject.asDiagonal();
    const auto inverse = diagonalMatrix.inverse();
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.