3

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

这些方法可以在这些结构中找到: template<> struct ldlt_inplace<Lower>http://eigen.tuxfamily.org/dox/LDLT_8h_source.htmltemplate<> struct ldlt_inplace<Upper>

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

4

1 回答 1

2

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

Transpositions<Dynamic> T(mat.cols());
VectorXd temp(mat.cols());
int sign;
Eigen::internal::ldlt_inplace<Eigen::Lower>::unblocked(mat, T, temp, &sign);

编辑

在 Eigen 3.3 中,您可以使用LDLT<Ref<MatrixXd> >

MatrixXd A;
LDLT<Ref<MatrixXd> > ldlt(A);

ldltA然后将在自身内部分解A。有关详细信息,请参阅文档

于 2013-08-10T08:34:28.207 回答