使用c ++库特征的低cholesky对角线的方形元素

时间:2018-02-22 00:03:14

标签: c++ 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分配给另一个矩阵,然后执行其他计算。我想知道为什么这是必要的,如果可能的话我怎么能绕过它。

1 个答案:

答案 0 :(得分:3)

TriangularView没有diagonal()成员(我不知道为什么)。您可以使用完整的matrixLLT()矩阵(将ref返回到基础矩阵),如下所示:VectorXd Q = V.llt().matrixLLT().diagonal().array().square();。表达式matrixL()只返回TriangularView返回的相同基础矩阵的matrixLLT()