对称正定矩阵的本征有效逆

dpr*_*tch 7 c++ matrix-inverse eigen

在本征,如果我们有对称正定矩阵A那么我们就可以计算出的逆A

A.inverse();
Run Code Online (Sandbox Code Playgroud)

或者

A.llt().solve(I);
Run Code Online (Sandbox Code Playgroud)

其中I是与 大小相同的单位矩阵A。但是有没有更有效的方法来计算对称正定矩阵的逆矩阵?

例如,如果我们写出Aas的 Cholesky 分解A = LL^{T},则L^{-T} L^{-1}Asince的逆A L^{-T} L^{-1} = LL^{T} L^{-T} L^{-1} = I(并且 whereL^{-T}表示 的转置的逆L)。

所以我们可以得到 的 Cholesky 分解A,计算它的逆,然后得到逆的叉积来找到 的逆A。但我的直觉是,计算这些显式步骤会比使用A.llt().solve(I)上述方法慢。

在有人问之前,我确实需要一个显式逆 - 它是 Gibbs 采样器的一部分的计算。

kan*_*yin 6

使用A.llt().solve(I),您假设A是一个 SPD 矩阵并应用 Cholesky 分解来求解方程Ax=I。求解方程的数学过程与您的显式方法完全相同。所以如果你正确地做每一步,性能应该是一样的。

另一方面,使用A.inverse(),您正在执行一般矩阵求逆,它对大矩阵使用 LU 分解。因此性能应该低于A.llt().solve(I);.