高斯-约旦消元法与LU分解的比较

6
在“黑皮书”Numerical Recipes第三版中,介绍了用高斯-约旦算法解线性方程组。紧接着是一个关于计算LU分解并用它来解线性方程组的章节(详见第53页上的LUdcmp::solve)。然而,该书未解释为什么会有人更喜欢一种方法而不是另一种方法。这两种方法是否等效,抑或在特定情况下有选择某种方法的原因?

2
或许有帮助:https://math.stackexchange.com/questions/266355/necessity-advantage-of-lu-decomposition-over-gaussian-elimination - stephan
1
我提出这个问题纯粹是从算法/编程的角度,而不是数学的角度。我的经验是,数学家通常不知道为什么应该优先选择一个算法而不是另一个算法。 - Tyler Durden
1
数值线性代数最好在计算科学上进行讨论 http://scicomp.stackexchange.com 请看一下,您会发现一个非常知识渊博的数值社区。 - Stefano M
2个回答

7
使用LU分解的好处在于,它可以被重复使用来计算多个解决方案。
例如,如果您想要解决以下方程:
Ax = b

对于一个常数A和许多不同的b,你只需要计算一次A的LU分解,就可以在每个b上重复使用。然而,使用高斯-约旦消元法,你必须为每个b重新做所有工作。
这样做更快的原因是因为高斯-约旦消元法的规模为O(n^3),但是LU分解方法的代换步骤只有O(n^2)的规模。因此,在LU情况下,你只需要为每个b执行昂贵的O(n^3)步骤一次。
关于这个问题的合理注释可以在这里找到。

因此,对于LU情况,您只需要针对每个b执行一次昂贵的O(n^3)步骤。-- 不是每个A吗? - Jason S
嗯,对于多个b值,x = A^-1 b也是O(n^2)。高斯-约旦和LU分解都是O(n^3)。我看不出有什么优势。 - Robin Davies

1
实际上,高斯-约旦算法比LU分解要快得多。编写一些C代码,你就会明白,因为在高斯-约旦算法中,你需要使用的代码和for循环比LU分解要少。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接