c++ - 使用 Eigen 就地进行 LDLT 分解

标签 c++ matrix linear-algebra eigen eigen3

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

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

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

最佳答案

内部确实意味着此功能的原型(prototype)可能会在未来的版本中发生变化。 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);

ldlt然后将分解 AA 内本身。查看doc了解详情。

关于c++ - 使用 Eigen 就地进行 LDLT 分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153298/

相关文章:

c++ - 我可以从外部访问函数内部的静态变量吗

c++ - 通过指针访问数组元素

C++:使用 nlohmann json 从文件中读取 json 对象

c - 在二维矩阵的上下文中 C 中 ** 和 &** 之间的区别

iPhone GPU 上的大型矩阵乘法

c++ - 带有指向自身指针的 Arduino 结构泄漏内存

r - 比较 R 中的矩阵求逆 - Cholesky 方法有什么问题?

optimization - 通过优化寻找矩阵

performance - 最大限度地减少由于大量 Numpy 点调用而产生的开销

c - 你如何使用 cblas_dgemm 做一个 vector 外积?