我试图从矩阵中提取对角线,然后使用 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"
有没有一种简单的方法来计算倒数,而无需手动执行?
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;
}