我正在开发一种解决Ax = b的算法,其中A和b是已知的。
有两种方法可以做到这一点 x = A -1 b或使用 Cholesky。我知道矩阵将始终是正方形和正定的,尽管 det( A ) 可能为零。在那些罕见的情况下,我可以忽略它。但是从计算和效率的角度来看,创建逆矩阵是否效率太低?
我正在开发一种解决Ax = b的算法,其中A和b是已知的。
有两种方法可以做到这一点 x = A -1 b或使用 Cholesky。我知道矩阵将始终是正方形和正定的,尽管 det( A ) 可能为零。在那些罕见的情况下,我可以忽略它。但是从计算和效率的角度来看,创建逆矩阵是否效率太低?
一般来说,您总是想使用求解器;实际求解器的运行速度应该与乘以逆运算一样快。与进行分解相比,计算逆矩阵不仅效率低下,而且使用逆矩阵具有分解/求解器方法避免的精度问题。
如果您有一个对称矩阵,Cholesky 分解是一个合理的选择。密切相关的LDL 分解具有相当的精度,同时也避免了平方根的需要。
如果您的矩阵不对称,则不能使用 Cholesky 或 LDL 分解——请改用LU 分解方法。
对于大型矩阵,是的,逆矩阵非常低效。然而,特殊属性,例如矩阵是下三角矩阵,使得逆计算更简单。
在数值分析中,Ax=b 最典型的解是 A(LUx=b) 的 LU 分解,然后解 Ly = b 为 y 和 Ux = y 为 x。
对于更稳定的方法,请考虑使用 QR 分解,其中 Q 具有 Q^T*Q = I 的特殊性质,因此 Rx = Q^Tb 其中 R 是上三角(只有一个反向求解,而不是正向和反向求解与卢)。
其他特殊性质,例如矩阵是对称的(Cholesky)或带状(Gauss),使某些求解器比其他求解器更好。
一如既往地注意计算中的浮点错误。
我可以补充一点,迭代求解器也是求解系统的一种流行方法。共轭梯度法是最常用的,并且适用于稀疏矩阵。Jacobi 和 Gauss-Seidel 适用于对角占优且稀疏的矩阵。