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