使用 C++ 库本征的下 cholesky 对角线的方形元素

Square elements of diagonal of lower cholesky using c++ library eigen

我想知道为什么不能使用 Eigen 编译:

#include <Eigen/Dense>

using namespace Eigen;

int main() {

  VectorXd Q = V.llt().matrixL().diagonal().array().pow(2);
}

我想像上面那样在一步中取下 cholesky 分解的对角线元素的平方,但我不能,因为编译器说:

error: no member named 'diagonal' in 'Eigen::TriangularView<const
      Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1>'
        MatrixXd Q = V.llt().matrixL().diagonal().array().pow(2);
                     ~~~~~~~~~~~~~~~~~ ^
1 error generated.
make[2]: *** [CMakeFiles/mvt.dir/src/rentalmain.cpp.o] Error 1
make[1]: *** [CMakeFiles/mvt.dir/all] Error 2
make: *** [all] Error 2

我必须将 Cholesky 分配给另一个矩阵,然后执行其他计算。我想知道为什么这是必要的,以及如何在可能的情况下解决它。

TriangularView 没有 diagonal() 成员(我不知道为什么)。您可以像这样使用完整的 matrixLLT() 矩阵(returns 底层矩阵的引用):VectorXd Q = V.llt().matrixLLT().diagonal().array().square();。表达式 matrixL() 只是 returns 与 matrixLLT() returns.

相同的基础矩阵的 TriangularView