2016-07-28 25 views
2

在本征,如果我们有对称正定矩阵A那么我们就可以通过本征对称正定矩阵的高效逆

A.inverse(); 

A.llt().solve(I); 

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

例如,如果我们写的A的Cholesky分解为A = LL^{T},然后L^{-T} L^{-1}是因为A L^{-T} L^{-1} = LL^{T} L^{-T} L^{-1} = I(和其中L^{-T}表示的L转置的倒数)的A倒数。因此,我们可以获得A的Cholesky分解,计算其逆,然后获得该逆的叉积来找到A的逆。但我的直觉是,计算这些明确的步骤将比上述使用A.llt().solve(I)慢。

而在任何人问起之前,我的确需要明确的反转 - 它是对Gibbs采样器的一部分进行计算。

+0

虽然接受的答案没有说明是否有更快的方法来计算具有特征的对称正定矩阵的逆,但我在问题中提到的显式方法是最快的方法(并且有序O((1/3)n^3 + 2n^2)) - 这显然是Eigen所做的。 – dpritch

回答

3

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

另一方面,与A.inverse(),你正在做一般矩阵反演,它使用LU分解大矩阵。因此性能应该低于A.llt().solve(I);

+0

感谢这节省了我大量的时间分析Cholesky解决方法与明确的方法,并在一天结束时仍然不知道它们是相同的。 – dpritch