C++ 具有特征值的LDLT就地分解

C++ 具有特征值的LDLT就地分解,c++,matrix,linear-algebra,eigen,eigen3,C++,Matrix,Linear Algebra,Eigen,Eigen3,我正在做一些非常大的对称矩阵(~800mb)的线性代数,我正在尝试几种不同的分解。目前,我正在实现LDLT,我想利用它通过用L^T覆盖矩阵的上三角来减少一半的内存需求。尽管Eigen的文档中没有列出要实现这一点的方法,但在内部名称空间中有一些隐藏的方法,它们可以满足我的需要 这些方法可以在以下结构中找到:template struct ldlt_inplace和template struct ldlt_inplace中 这些方法是我想要的,对吗?我如何使用它们?我是否应该避免使用它们,因为它们

我正在做一些非常大的对称矩阵(~800mb)的线性代数,我正在尝试几种不同的分解。目前,我正在实现LDLT,我想利用它通过用L^T覆盖矩阵的上三角来减少一半的内存需求。尽管Eigen的文档中没有列出要实现这一点的方法,但在内部名称空间中有一些隐藏的方法,它们可以满足我的需要

这些方法可以在以下结构中找到:
template struct ldlt_inplace
template struct ldlt_inplace


这些方法是我想要的,对吗?我如何使用它们?我是否应该避免使用它们,因为它们是内部的,因此可能会被更改和弃用?

内部确实意味着该函数的原型可能会在将来的版本中更改。LDLT::compute()方法是如何使用它的一个很好的例子:

Transpositions<Dynamic> T(mat.cols());
VectorXd temp(mat.cols());
int sign;
Eigen::internal::ldlt_inplace<Eigen::Lower>::unblocked(mat, T, temp, &sign);
换位T(mat.cols());
向量xd温度(mat.cols());
整数符号;
本征::内部::ldlt\U就地::未阻塞(垫、T、温度和符号);
编辑

在Egeng 3.3中,您可以使用
LDLT

矩阵A;
LDLT-LDLT(A);

ldlt
然后将
A
分解为
A
本身。有关详细信息,请参阅。

谢谢!其实很简单。我是否可以采取任何预防措施来保护自己不受未来变化的影响?现在官方支持:
MatrixXd A;
LDLT<Ref<MatrixXd> > ldlt(A);