c++ - eigen C++ 中的 Cholesky 分解 : how to get both the D vector and the inverse in one swoop?

标签 c++ eigen

一个快速(也许是幼稚)的问题。考虑以下代码,其中 Sig 是对称 PSD 矩阵。

VectorXf c=Sig.ldlt().vectorD();
int p=Sig.cols();
MatrixXf b=MatrixXf::Identity(p,p); 
Sig.ldlt().solveInPlace(b);

这里对 Sig 进行了多少次 Cholesky 分解? 如果上述答案不止一次,我需要 D vector 以及 Sig 的倒数。最快的方法是什么(例如没有多余的 计算)以获得特征值?

最佳答案

有两种 cholesky 分解,每次调用 ldlt() 一次。 ldlt() 函数返回 LDLT目的。由此您可以获得 Cholesky 分解涉及的所有矩阵。

LDLT<MatrixXf> chol = Sig.ldlt();
VectorXf c = chol.vectorD();
int p = Sig.cols();
MatrixXf b = MatrixXf::Identity(p, p);
b = chol.solve(b);

关于c++ - eigen C++ 中的 Cholesky 分解 : how to get both the D vector and the inverse in one swoop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17200788/

相关文章:

c++ - boost 序列化: safe to ignore warning?

c++ - 在不知道确切名称的情况下读取文件夹中的图像

c++ - 隐式调用的结构析构函数 - 我的语法有误吗?

c++ - Cinder:如何获取指向已生成但从未在屏幕上显示的数据\帧的指针?

c++ - 将 Matrix::row() 的返回分配给 Matrix<X,1,Dynamic>

c++ - 从函数中通过引用返回 Eigen::VectorXd

c++ - 使用特征矩阵构建 3D 结构的最有效选项

C++ 指针 - 常见做法

c++ - 在依赖的附加对象链上执行旋转变换的最快方法

visual-studio - 由于与 MSVC14 和 AVX 的未对齐访问而导致 Eigen 崩溃