我正在开发一个算法,用于解决 Ax=b 的问题,其中 A 和 b 已知。有两种方法可以做到这一点:x=A-1b 或使用 Cholesky。我知道矩阵总是正方形且正定的,尽管 det(A) 可能为零。在那些罕见的情况下,我可以忽略它。但从计算和效率的角度来看,创建逆矩阵是否太低效了?
对于大矩阵,是的求逆非常低效。但是,特殊的属性,例如矩阵是下三角矩阵,使得计算逆变得更加简单。在数值分析中,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对于对角线支配和稀疏的矩阵很好。
一般来说,您总是希望使用求解器;实际的求解器应该运行得比求逆矩阵要快。与计算逆矩阵相比,使用分解/求解方法可以避免精度问题,并且效率更高。如果您有一个对称矩阵,则Cholesky 分解是一个合理的选择。紧密相关的LDL 分解具有可比较的精度,同时也避免了需要进行平方根运算的步骤。如果您的矩阵不对称,则不能使用 Cholesky 或 LDL 分解 - 而应使用LU 分解方法。