【问题标题】:Inplace LDLT decomposition with Eigen用 Eigen 替换 LDLT 分解
【发布时间】:2013-08-09 18:29:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ matrix linear-algebra eigen eigen3


    【解决方案1】:

    Internal 确实意味着这个函数的原型在未来的版本中可能会改变。 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&lt;Ref&lt;MatrixXd&gt; &gt;

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

    ldlt 然后将A 分解为A 本身。详情请见doc

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2020-11-09
    相关资源
    最近更新 更多