使用 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
我想知道为什么不能使用 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