如何选择一种求解线性方程的方法


31

据我所知,有四种方法可以解决线性方程组(如果有更多方法,请纠正我):

  1. 如果系统矩阵是满级方阵,则可以使用Cramer规则;
  2. 计算系统矩阵的逆或伪逆;
  3. 使用矩阵分解方法(将高斯或高斯-乔丹消除法视为逻辑分解);
  4. 使用迭代方法,例如共轭梯度法。

实际上,您几乎从不希望通过使用Cramer规则或计算逆或伪逆来求解方程,尤其是对于高维矩阵,因此第一个问题是何时分别使用分解方法和迭代方法。我猜这取决于系统矩阵的大小和属性。

就您所知,第二个问题是,就数值稳定性和效率而言,哪种分解方法或迭代方法最适合某些系统矩阵。

例如,使用共轭梯度法来求解方程,其中矩阵是对称和正定的,虽然它也可以应用到任何线性方程通过转换Ax=bATAx=ATb。对于正定矩阵,也可以使用Cholesky分解方法来寻找解。但是我不知道何时选择CG方法以及何时选择Cholesky分解。我的感觉是,对于大型矩阵,我们最好使用CG方法。

对于矩形矩阵,我们可以使用QR分解或SVD,但同样,我也不知道如何选择其中之一。

对于其他矩阵,我现在不介绍如何选择合适的求解器,例如厄米/对称矩阵,稀疏矩阵,带矩阵等。


1
嗨@chaohuang,欢迎来到SciComp!您可能想看一下下面的讨论: scicomp.stackexchange.com/questions/81/…–
保罗

嗨,@ Paul,谢谢您的评论,该线程是仅关于稀疏矩阵还是任何矩阵?
chaohuang 2012年

6
您的问题涉及范围很广,对于我们在stackexchange上的问答格式而言,可能有点太宽泛了……您是否对一类特定的矩阵系统感兴趣?
保罗

3
@chaohuang关于这个主题的书籍很多。这个问题有点像问医生他们“一般”如何选择治疗方法。如果您想提出的问题并非特定于特定类别的问题,则应投入工作以充分熟悉该领域,以提出精确的问题。否则,请解释您所关心的特定问题。
杰德·布朗

2
从常见问题解答中:如果您能想象一整本书都能回答您的问题,那么您的要求就太多了。 与该问题相关的整本期刊和数百本书。
David Ketcheson 2012年

Answers:


45

Ax=b

Ax~

  1. x~x~x~x<103x
  2. 您需要多?这里唯一相关的指标是时钟时间你的机器-这完全扩展一个巨大的集群可能不是最好的选择,如果你没有其中的一个方法,但你有那些闪闪发光的全新的Tesla卡之一。

由于没有免费的午餐之类的东西,因此您通常必须在两者之间做出权衡。之后,您开始查看矩阵(和您的硬件)以决定一种好的方法(或更确切地说,是您可以找到好的实现的方法)。(请注意,在这里我避免写“ best”)。这里最相关的属性是A

  • 结构:是对称的?是密集还是稀疏?带了吗?A
  • 特征值:他们全部阳性(即是正定)?他们集群了吗?它们中的一些幅度很小还是很大?A

考虑到这一点,您随后必须浏览(大量)文献并评估针对特定问题找到的不同方法。以下是一些一般性说明:

  • 如果您的解决方案确实需要(接近)机器精度,或者矩阵很小(例如,最多行),则很难击败直接方法,特别是对于密集系统(因为在这种情况下,每个矩阵乘法)将是,如果您需要大量迭代,则可能与直接方法所需的不远。而且,与大多数迭代方法相反,LU分解(带有旋转)可用于任何可逆矩阵。(当然,如果是对称且为正定的,则​​可以使用Cholesky。)1000O(n2)O(n3)A

    如果您没有遇到内存问题,那么对于(大型)稀疏矩阵也是如此:稀疏矩阵通常没有稀疏的LU分解,并且如果因素不适合(快速)内存,则这些方法将变得不可用。

    另外,直接方法已经存在很长时间了,并且存在可以自动利用的能带结构的非常高质量的软件(例如UMFPACK,MUMPS,用于稀疏矩阵的SuperLU)。A

  • 如果您需要较低的精度,或者不能使用直接方法,请选择Krylov方法(例如,如果是对称正定值,则 CG ;如果不是,则使用GMRES或BiCGStab),而不要使用固定方法(例如Jacobi或Gauss-Seidel):因为它们的收敛不是由的谱半径决定,而是由条件数的(平方根)决定,并且不依赖于矩阵的结构,所以它们的工作效果更好。但是,要从Krylov方法获得真正好的性能,您需要为矩阵选择一个好的预处理器-而且这比一门科学更重要。AA

  • 如果您反复需要求解具有相同矩阵和不同右侧的线性系统,则直接方法仍然比迭代方法更快,因为您只需要计算一次分解即可。(这是顺序解决方案;如果您同时拥有所有右侧,则可以使用块Krylov方法。)

当然,这些只是非常粗略的指导原则:对于以上任何一种陈述,都可能存在一个矩阵,其反之亦然。

由于您要求在评论中提供参考,因此这里有一些教科书和复习论文可以帮助您入门。(这些(或集合)都不是全面的;这个问题过于广泛,并且在很大程度上取决于您的特定问题。)


2
我喜欢你比喻螺丝刀!
保罗

@chaohuang如果此回答您的问题,则应接受。(如果没有,请随时指出缺少的内容。)
Christian Clason,2012年

@ChristianClason接受了它。我在等待,希望有人可以对矩形矩阵的问题有所了解。既然已经有很长的时间了,我想永远不会有这样的答案了:(
chaohuang 2012年

@chaohuang谢谢。如果您仍然对矩形矩阵感兴趣,则应该提出一个(链接的)问题:“如何选择一种解决超定系统的方法”。
克里斯蒂安·克拉森

这里是使用迭代方法求解大型稀疏线性方程组的参考。
chaohuang


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.