我想知道为什么不能使用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分配给另一个矩阵,然后执行其他计算。我想知道为什么这是必要的,如果可能的话我怎么能绕过它。
答案 0 :(得分:3)
TriangularView
没有diagonal()
成员(我不知道为什么)。您可以使用完整的matrixLLT()
矩阵(将ref返回到基础矩阵),如下所示:VectorXd Q = V.llt().matrixLLT().diagonal().array().square();
。表达式matrixL()
只返回TriangularView
返回的相同基础矩阵的matrixLLT()
。