据我所知,有四种方法可以解决线性方程组(如果有更多方法,请纠正我):
- 如果系统矩阵是满级方阵,则可以使用Cramer规则;
- 计算系统矩阵的逆或伪逆;
- 使用矩阵分解方法(将高斯或高斯-乔丹消除法视为逻辑分解);
- 使用迭代方法,例如共轭梯度法。
实际上,您几乎从不希望通过使用Cramer规则或计算逆或伪逆来求解方程,尤其是对于高维矩阵,因此第一个问题是何时分别使用分解方法和迭代方法。我猜这取决于系统矩阵的大小和属性。
就您所知,第二个问题是,就数值稳定性和效率而言,哪种分解方法或迭代方法最适合某些系统矩阵。
例如,使用共轭梯度法来求解方程,其中矩阵是对称和正定的,虽然它也可以应用到任何线性方程通过转换到。对于正定矩阵,也可以使用Cholesky分解方法来寻找解。但是我不知道何时选择CG方法以及何时选择Cholesky分解。我的感觉是,对于大型矩阵,我们最好使用CG方法。
对于矩形矩阵,我们可以使用QR分解或SVD,但同样,我也不知道如何选择其中之一。
对于其他矩阵,我现在不介绍如何选择合适的求解器,例如厄米/对称矩阵,稀疏矩阵,带矩阵等。