c++ - 如何在 Eigen 中有效地使用逆和行列式?

标签 c++ eigen matrix-inverse determinants

在 Eigen 中有 recommendations警告行列式和逆矩阵的显式计算。

我正在使用 normal-inverse-wishart 先验分布对多元正态进行后验预测。这可以表示为多元 t 分布。

在多元 t 分布中,您会发现项 |Sigma|^{-1/2} 以及 (x-mu)^T Sigma^{-1} (x-mu).

我对 Eigen 很无知。我可以想象对于半正定矩阵(它是协方差矩阵)我可以使用 LLT 求解器。

但是,求解器本身没有定义.determinant().inverse() 方法。我是否必须使用 .matrixL() 函数并自己将对角线上的元素取反来求逆,并计算乘积以获得行列式?我想我错过了什么。

最佳答案

如果您有 Sigma=LL^T 的 Cholesky 分解并且想要 (x-mu)^T*Sigma^{-1}*(x-mu),您可以计算:(llt.matrixL().solve(x-mu)).squaredNorm()(假设 xmu是 vector )。

对于行列式的平方根,只需计算llt.matrixL().determinant()(计算三角矩阵的行列式只是其对角线元素的乘积)。

关于c++ - 如何在 Eigen 中有效地使用逆和行列式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385477/

相关文章:

c++ - Eigen 3 断言在求解线性系统时失败 - 据我所知,这是由于 Eigen 中的无效索引造成的

c++ - 尝试编译 Eigen 时 Visual Studio 2013 崩溃

math - 在矩阵与逆矩阵之间进行矩阵乘法后获得恒等矩阵时出错

python - 为什么通过 Cholesky 分解反转正定矩阵比使用 numpy 进行常规反转慢?

algorithm - 使用 SIMD 指令是否可以进行 3x3 矩阵求逆?

c++ - 将 PNG 纹理导入内存而不是帧缓冲区 - 使用 C++ 和 OpenGL

c++ - 它不会打印完整地址

c++ - Eigen 模板库Random()方法算法

c++ - midifile : getDurationInSeconds is 0 for all events

c++ - 将仿函数作为函数指针传递