矩阵求逆使用矩阵分解还是Cholesky分解?

4
我正在开发一个算法,用于解决 Ax=b 的问题,其中 Ab 已知。
有两种方法可以做到这一点:x=A-1b 或使用 Cholesky。我知道矩阵总是正方形且正定的,尽管 det(A) 可能为零。在那些罕见的情况下,我可以忽略它。但从计算和效率的角度来看,创建逆矩阵是否太低效了?

5
这个问题可能更适合发布在http://math.stackexchange.com/上。 - Roger Rowland
2
Cholesky 只有在 A 也是对称的情况下才能工作——如果是这样,那么一定要选择 Cholesky。 - Drew Hall
但为什么选择Cholesky?A始终对称。我不是在想数学问题,而是在考虑计算机比另一个更高效的问题。 - user1876942
完整矩阵求逆更容易产生舍入误差。一个更好的解决方案,特别是当你有多个RHS向量时,是LU分解。 - duffymo
只是一个纠正,但解决Ax=b的方法不仅限于上述提到的两种。请参见我的下面的答案。 - DashControl
如果矩阵A是正定的,那么它的行列式det(A)永远不可能为零。也许你的意思是说它是半正定的。 - texasflood
2个回答

8
对于大矩阵,是的求逆非常低效。但是,特殊的属性,例如矩阵是下三角矩阵,使得计算逆变得更加简单。
在数值分析中,Ax=b的最典型的解法是A(LUx=b)的LU分解,然后解Ly = b得到y,Ux = y 得到x。
对于更稳定的方法,请考虑使用QR分解,其中Q有特殊属性Q^T * Q = I,因此Rx = Q^Tb,其中R是上三角矩阵(只需一个反向求解,而不是LU中的前向和反向求解)。
其他特殊属性,例如矩阵对称(Cholesky)或带状(Gauss)使某些求解器比另一些求解器更好。
总是要注意在计算中出现浮点误差
我想补充一下,迭代求解器也是解决系统的流行方法。共轭梯度法是最常用的,在稀疏矩阵中效果很好。Jacobi和Gauss-Seidel对于对角线支配和稀疏的矩阵很好。

1
+1 for the QR 评论。我倾向于首先考虑LU,因为它更常用于解决有限元方程。一个后退求解的不错技巧。 - duffymo

7
一般来说,您总是希望使用求解器;实际的求解器应该运行得比求逆矩阵要快。与计算逆矩阵相比,使用分解/求解方法可以避免精度问题,并且效率更高。
如果您有一个对称矩阵,则Cholesky 分解是一个合理的选择。紧密相关的LDL 分解具有可比较的精度,同时也避免了需要进行平方根运算的步骤。
如果您的矩阵不对称,则不能使用 Cholesky 或 LDL 分解 - 而应使用LU 分解方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接