在 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()
(假设 x
和 mu
是 vector )。
对于行列式的平方根,只需计算llt.matrixL().determinant()
(计算三角矩阵的行列式只是其对角线元素的乘积)。
关于c++ - 如何在 Eigen 中有效地使用逆和行列式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385477/