try ai
科普
编辑
分享
反馈
  • 雅可比迭代法

雅可比迭代法

SciencePedia玻尔百科
核心要点
  • 雅可比方法是一种迭代算法,它通过仅使用上一步的值来重复修正初始猜测,从而求解线性方程组。
  • 迭代收敛的充要条件是其迭代矩阵的谱半径小于1,而严格对角占优是一个实用的充分条件。
  • 该方法的结构中,每个新分量的计算都是独立的,这使其具有内在的并行性,非常适合分布式计算环境。
  • 在现代数值分析中,雅可比方法通常不作为主要求解器使用,而是作为一种有效的“平滑器”,用于在多重网格算法中衰减高频误差。

引言

大型线性方程组是计算科学与工程的基石,模拟着从材料中的热流到复杂网络的互联性等各种现象。虽然直接法可以强行求解这些系统,但随着变量数量的增加,它们在计算上往往变得不可行。这一挑战为一种更优雅的方法——迭代法——打开了大门。在这些方法中,最基本的一种是雅可比迭代法,它基于一个异常简单的思想:逐步修正一个猜测,直到它收敛于真实解。

但是,这样一个简单的“猜谜游戏”如何能可靠地解决复杂的数学问题?它在什么情况下有效,又在什么情况下会失败?在一个算法日益复杂的时代,这种经典方法是否仍然具有现实意义?本文将深入雅可比迭代法的核心,以回答这些问题。在接下来的章节中,我们将首先剖析其核心原理和机制,揭示其背后的数学机器以及支配其行为的优雅收敛理论。然后,我们将探索其多样化的应用和跨学科联系,揭示这个看似简单的算法如何在从物理学到并行计算等领域中发挥强大作用,并成为当今一些最快数值求解器中的关键组成部分。

原理与机制

猜测的艺术:一个简单的想法

想象你面对着一个庞大而纠缠的线性方程组。用直接、强力的方法一次性求解所有方程可能会异常复杂。相反,我们是否可以仅仅……猜测答案?然后,用我们的猜测来得到一个稍好的猜测,接着是一个更好的,如此反复,直到我们锁定真相?这就是雅可比方法核心处那个迷人而简单的想法。

让我们看看这是如何运作的。考虑一个模拟某受热物体上三点稳态温度的系统。每个点的温度都取决于其相邻点:

{10x1−2x2+x3=6x1+8x2+3x3=−3−2x1+x2+5x3=7\begin{cases} 10x_1 - 2x_2 + x_3 = 6 \\ x_1 + 8x_2 + 3x_3 = -3 \\ -2x_1 + x_2 + 5x_3 = 7 \end{cases}⎩⎨⎧​10x1​−2x2​+x3​=6x1​+8x2​+3x3​=−3−2x1​+x2​+5x3​=7​

我们不去尝试一次性解决所有问题,而是重新整理每个方程,以分离出该行中的“主要”变量——也就是对角线上的那个。

x1=110(6+2x2−x3)x2=18(−3−x1−3x3)x3=15(7+2x1−x2)x_1 = \frac{1}{10}(6 + 2x_2 - x_3) \\ x_2 = \frac{1}{8}(-3 - x_1 - 3x_3) \\ x_3 = \frac{1}{5}(7 + 2x_1 - x_2)x1​=101​(6+2x2​−x3​)x2​=81​(−3−x1​−3x3​)x3​=51​(7+2x1​−x2​)

现在,让我们做一个大胆、完全无依据的初始猜测。最简单的是所有温度都为零:x(0)=(000)T\mathbf{x}^{(0)} = \begin{pmatrix} 0 & 0 & 0 \end{pmatrix}^Tx(0)=(0​0​0​)T。如果我们将这些值代入整理后方程的右侧,会发生什么?我们会得到一组新值,即我们的第一个修正后的猜测值 x(1)\mathbf{x}^{(1)}x(1):

x1(1)=110(6+2(0)−0)=610=35x2(1)=18(−3−0−3(0))=−38x3(1)=15(7+2(0)−0)=75x_1^{(1)} = \frac{1}{10}(6 + 2(0) - 0) = \frac{6}{10} = \frac{3}{5} \\ x_2^{(1)} = \frac{1}{8}(-3 - 0 - 3(0)) = -\frac{3}{8} \\ x_3^{(1)} = \frac{1}{5}(7 + 2(0) - 0) = \frac{7}{5}x1(1)​=101​(6+2(0)−0)=106​=53​x2(1)​=81​(−3−0−3(0))=−83​x3(1)​=51​(7+2(0)−0)=57​

所以我们的新猜测是 x(1)=(35−3875)\mathbf{x}^{(1)} = \begin{pmatrix} \frac{3}{5} & -\frac{3}{8} & \frac{7}{5} \end{pmatrix}x(1)=(53​​−83​​57​​)。我们从一个全零的猜测变成了一个非平凡的值。这是正确答案吗?几乎肯定不是。但它更好了吗?我们可以重复这个过程:将 x(1)\mathbf{x}^{(1)}x(1) 的值代回右侧以得到 x(2)\mathbf{x}^{(2)}x(2),依此类推。我们希望这个向量序列 x(0),x(1),x(2),…\mathbf{x}^{(0)}, \mathbf{x}^{(1)}, \mathbf{x}^{(2)}, \dotsx(0),x(1),x(2),… 能够稳步地越来越接近真实解。

猜测的机器:矩阵表示法

这个迭代过程令人愉快,但手动操作却很乏味。作为物理学家和数学家,我们寻求潜在的结构。我们能否构建一台为我们进行猜测的“机器”?这正是线性代数的威力与美妙之处。

任何线性方程组都可以写成一个单一的矩阵方程 Ax=bA\mathbf{x} = \mathbf{b}Ax=b。对于我们的例子,

A=(10−21183−215),x=(x1x2x3),b=(6−37)A = \begin{pmatrix} 10 & -2 & 1 \\ 1 & 8 & 3 \\ -2 & 1 & 5 \end{pmatrix}, \quad \mathbf{x} = \begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix}, \quad \mathbf{b} = \begin{pmatrix} 6 \\ -3 \\ 7 \end{pmatrix}A=​101−2​−281​135​​,x=​x1​x2​x3​​​,b=​6−37​​

自动化我们猜测游戏的关键在于将矩阵 AAA 分解为三个更简单的部分:

  • DDD,一个​​对角​​矩阵,只包含 AAA 的对角线元素。
  • LLL,一个严格​​下三角​​矩阵,包含 AAA 对角线以下的元素。
  • UUU,一个严格​​上三角​​矩阵,包含 AAA 对角线以上的元素。

所以,A=D+L+UA = D + L + UA=D+L+U。我们最初的方程 Ax=bA\mathbf{x} = \mathbf{b}Ax=b 变成了 (D+L+U)x=b(D+L+U)\mathbf{x} = \mathbf{b}(D+L+U)x=b。重新整理得到 Dx=b−(L+U)xD\mathbf{x} = \mathbf{b} - (L+U)\mathbf{x}Dx=b−(L+U)x。这正是分离对角项的矩阵版本!为了把它变成一个迭代秘方,我们只需在 x\mathbf{x}x 向量上加上迭代计数器(括号中的上标):

Dx(k+1)=b−(L+U)x(k)D\mathbf{x}^{(k+1)} = \mathbf{b} - (L+U)\mathbf{x}^{(k)}Dx(k+1)=b−(L+U)x(k)

这表示:要得到下一个猜测值 x(k+1)\mathbf{x}^{(k+1)}x(k+1),在右侧使用当前的猜测值 x(k)\mathbf{x}^{(k)}x(k)。由于 DDD 是一个对角矩阵,它的求逆非常简单。其逆矩阵 D−1D^{-1}D−1 只是一个对角线元素为 DDD 相应对角线元素倒数的对角矩阵。这是一个关键点:如果任何对角线元素为零,整个方法就会失效,因为此时 DDD 不可逆。假设所有对角线元素都非零,我们就可以解出下一个猜测值:

x(k+1)=−D−1(L+U)x(k)+D−1b\mathbf{x}^{(k+1)} = -D^{-1}(L+U)\mathbf{x}^{(k)} + D^{-1}\mathbf{b}x(k+1)=−D−1(L+U)x(k)+D−1b

这就是著名的雅可比迭代公式。它具有​​不动点迭代​​的一般形式 x(k+1)=TJx(k)+c\mathbf{x}^{(k+1)} = T_J \mathbf{x}^{(k)} + \mathbf{c}x(k+1)=TJ​x(k)+c。这里,我们有两个关键组成部分:

  • ​​雅可比迭代矩阵​​,TJ=−D−1(L+U)T_J = -D^{-1}(L+U)TJ​=−D−1(L+U),它修正旧的猜测值。它是一个“影响矩阵”,决定了一次迭代中变量的值如何影响下一次迭代中的其他变量。它的对角线元素总是零,这意味着一个变量的新值不直接依赖于它自己的旧值,而只依赖于其他变量的旧值。
  • ​​常数向量​​,c=D−1b\mathbf{c} = D^{-1}\mathbf{b}c=D−1b,它包含了来自系统的外部常数。

百万美元问题:它有效吗?

我们已经构建了一台用于生成猜测的美妙机器。但它真的能带我们找到正确答案吗?这就是​​收敛​​的问题。

让真实、精确的解(我们正在寻找的)为 x\mathbf{x}x。根据定义,它必须满足原始方程 Ax=bA\mathbf{x} = \mathbf{b}Ax=b,这也意味着它必须是我们迭代机器的一个不动点:x=TJx+c\mathbf{x} = T_J\mathbf{x} + \mathbf{c}x=TJ​x+c。

现在,让我们看看第 kkk 步猜测的误差,定义为 e(k)=x−x(k)\mathbf{e}^{(k)} = \mathbf{x} - \mathbf{x}^{(k)}e(k)=x−x(k)。这个误差从一步到下一步是如何变化的?让我们从真实解的不动点方程中减去我们的迭代公式:

x−x(k+1)=(TJx+c)−(TJx(k)+c)\mathbf{x} - \mathbf{x}^{(k+1)} = (T_J\mathbf{x} + \mathbf{c}) - (T_J\mathbf{x}^{(k)} + \mathbf{c})x−x(k+1)=(TJ​x+c)−(TJ​x(k)+c)
e(k+1)=TJ(x−x(k))=TJe(k)\mathbf{e}^{(k+1)} = T_J(\mathbf{x} - \mathbf{x}^{(k)}) = T_J\mathbf{e}^{(k)}e(k+1)=TJ​(x−x(k))=TJ​e(k)

这是一个极其简单而深刻的结果。下一步的误差向量就是当前误差向量乘以迭代矩阵 TJT_JTJ​。如果我们把这个关系一直追溯到我们的初始猜测,我们得到:

\mathbf{e}^{(k)} = T_J^k \mathbf{e}^{(0)} $$ 这个优美的小公式包含了收敛的全部秘密。为了使我们的迭代成功,我们需要误差 $\mathbf{e}^{(k)}$ 在 $k$ 变大时趋于零,无论我们的初始误差 $\mathbf{e}^{(0)}$ 是什么。当且仅当[矩阵的幂](/sciencepedia/feynman/keyword/matrix_powers) $T_J^k$ 在 $k \to \infty$ 时收缩为零矩阵,这种情况才会发生。 ### 机器的灵魂:[谱半径](/sciencepedia/feynman/keyword/spectral_radius) 那么,一个矩阵的多少次幂会消失呢?答案在于它的[特征值](/sciencepedia/feynman/keyword/eigenvalue)。对于任何像 $T_J$ 这样的方阵,都存在一些特殊的向量,称为[特征向量](/sciencepedia/feynman/keyword/eigenvector),当被该矩阵相乘时,它们只会被拉伸或收缩。拉伸或收缩的量就是相应的[特征值](/sciencepedia/feynman/keyword/eigenvalue) $\lambda$。 当 $k \to \infty$ 时,$T_J^k$ 的命运由其模最大的[特征值](/sciencepedia/feynman/keyword/eigenvalue)决定。我们称这个值为​**​谱半径​**​,记作 $\rho(T_J)$。它是支配迭代长期行为的“主宰数”。迭代法的基本定理以绝对清晰的方式阐明了这一点: *[雅可比迭代](/sciencepedia/feynman/keyword/jacobi_iteration)法对任意初始猜测收敛的[充要条件](/sciencepedia/feynman/keyword/necessary_and_sufficient_conditions)是,其[迭代矩阵](/sciencepedia/feynman/keyword/iteration_matrix)的[谱半径](/sciencepedia/feynman/keyword/spectral_radius)严格小于1:$\rho(T_J) < 1$。* [@problem_id:2393390, statement A]。 如果 $\rho(T_J) < 1$,那么每次应用 $T_J$ 都会倾向于缩小误差向量,反复应用将不可逆转地将其压缩至零。如果 $\rho(T_J) \ge 1$,那么至少存在一个方向,误差要么不缩小,要么会增长,导致迭代失败。 例如,对于矩阵为 $A = \begin{pmatrix} 2 & -3 \\ 1 & 2 \end{pmatrix}$ 的系统,其[迭代矩阵](/sciencepedia/feynman/keyword/iteration_matrix)是 $T_J = \begin{pmatrix} 0 & \frac{3}{2} \\ -\frac{1}{2} & 0 \end{pmatrix}$。它的[特征值](/sciencepedia/feynman/keyword/eigenvalue)是 $\pm i \frac{\sqrt{3}}{2}$。[谱半径](/sciencepedia/feynman/keyword/spectral_radius)是这些[特征值](/sciencepedia/feynman/keyword/eigenvalue)的模,$\rho(T_J) = \frac{\sqrt{3}}{2} \approx 0.866$。因为这个值小于1,所以[雅可比方法](/sciencepedia/feynman/keyword/jacobian_method)保证对这个[系统收敛](/sciencepedia/feynman/keyword/systematic_convergence)。 ### 经验法则及其适用范围 计算[特征值](/sciencepedia/feynman/keyword/eigenvalue)可能是一件苦差事——有时甚至和解决原始问题一样困难!如果我们有一些更简单、粗略的方法来判断迭代是否会收敛,那就太好了。 一个强大的工具是​**​[矩阵范数](/sciencepedia/feynman/keyword/matrix_norms)​**​ $\|T_J\|$ 的概念,它衡量了矩阵的“大小”或最大“拉伸能力”。对于任何范数,总有 $\rho(T_J) \le \|T_J\|$ 成立。这给了我们一个方便的充分条件:如果我们能找到*任何*一个[矩阵范数](/sciencepedia/feynman/keyword/matrix_norms)使得 $\|T_J\| < 1$,那么我们就能肯定 $\rho(T_J) < 1$,并且方法收敛。对于一个*特定*的范数,反之不一定成立(你可能会有 $\rho(T_J) < 1$,即使比如 $\|T_J\|_{\infty} \ge 1$),但如果 $\rho(T_J) < 1$,那么*存在*某个特殊范数使得 $\|T_J\| < 1$ 是成立的 [@problem_id:2393390, statements B and E]。 这引出了一个非常实用的[经验法则](/sciencepedia/feynman/keyword/68_95_99.7_rule)。最容易计算的范数之一是“[无穷范数](/sciencepedia/feynman/keyword/infinity_norm_2)”,$\|T_J\|_{\infty}$,它就是每行元素[绝对值](/sciencepedia/feynman/keyword/absolute_value)之和的最大值。对于雅可比矩阵,这变成:

|T_J|{\infty} = \max{i} \sum_{j \neq i} \frac{|a_{ij}|}{|a_{ii}|}

条件 $\|T_J\|_{\infty} < 1$ 意味着对于每一行,都有 $|a_{ii}| > \sum_{j \neq i} |a_{ij}|$。这个性质有一个特殊的名字:矩阵 $A$ 是​**​[严格对角占优](/sciencepedia/feynman/keyword/strictly_diagonally_dominant)​**​的。用白话来说,这意味着在每个方程中,主系数(对角线上的)比该行中所有其他系数的总和还要大。物理学和工程学中的许多问题,特别是那些涉及最近邻相互作用(如[热扩散](/sciencepedia/feynman/keyword/thermodiffusion))的问题,自然会产生具有此性质的矩阵。如果你看到一个[严格对角占优](/sciencepedia/feynman/keyword/strictly_diagonally_dominant)的矩阵,你可以打赌[雅可比方法](/sciencepedia/feynman/keyword/jacobian_method)会奏效。 但这里正是大师与学徒的分野所在。[对角占优](/sciencepedia/feynman/keyword/diagonal_dominance)是收敛的*必要*条件吗?绝对不是!它是一个*充分*条件,而非*必要*条件。考虑矩阵 $A = \begin{pmatrix} 3 & 1 \\ 4 & 2 \end{pmatrix}$。它不是[对角占优](/sciencepedia/feynman/keyword/diagonal_dominance)的;在第二行中,对角线元素 $2$ 并不大于非对角[线元](/sciencepedia/feynman/keyword/line_element)素 $4$ 。人们可能会草率地断定[雅可比方法](/sciencepedia/feynman/keyword/jacobian_method)会失败。但让我们看看这台机器的灵魂!其[迭代矩阵](/sciencepedia/feynman/keyword/iteration_matrix)的[谱半径](/sciencepedia/feynman/keyword/spectral_radius)是 $\rho(T_J) = \sqrt{\frac{2}{3}} \approx 0.816$,小于1。该方法收敛得非常好! 这是一个深刻的教训。简单的经验法则对于快速检查是无价的,但它们并不能说明全部情况。收敛的最终仲裁者是,且永远是,谱半径。[雅可比方法](/sciencepedia/feynman/keyword/jacobian_method),源于一个简单的迭代猜测思想,却受这一深刻而优雅的原则支配,将其际应用与线性代数的基本理论统一起来。

应用与跨学科联系

既然我们已经拆解了雅可比迭代法的内部构造,并理解了其内在机制,现在是时候提出最重要的问题了:它有何用处?它仅仅是课堂上的一个趣闻,是通往更高级方法的垫脚石吗?还是说这个简单的想法在科学和工程的殿堂中回响?你可能会欣喜地发现,答案是,雅可比迭代法远不止是一个历史注脚。它是一种思维方式,一种计算范式,其印记在各种令人惊讶的现代领域中都能找到。这是一个关于纯粹的局部信息,通过迭代交换,如何共同揭示一个全局真理的故事。

网格中的世界:从热流到像素

许多物理定律,从热的扩散到鼓面的振动,都以微分方程的形式表达。这些方程描述了一个量如何从一个点到下一个点平滑地变化。但是计算机不能以无限小的概念思考;它用数字思考。为了弥合这一差距,我们采用一种计算科学核心的技巧:我们进行*离散化*。我们在问题上铺设一个网格,并声明我们只关心这个网格点上的温度、压力或位移。

想象一根我们正在加热的细长金属棒。连续的热流微分方程被一个简单、符合常识的规则所取代,适用于我们网格上的每个点:其稳态温度就是其直接相邻点温度的平均值。当你为网格上的每个点写下这个规则时,你得到的不是一个单一的方程,而是一个庞大的线性方程组,每个点对应一个方程。代表这个系统的矩阵具有一种特殊结构:它是稀疏的,意味着它的大多数元素都是零,因为每个点的温度只取决于它的邻居,而不取决于远处的点。

这正是雅可比方法感到宾至如归的那种系统。雅可比迭代的每一步,在数学上等同于每个网格点查看其邻居当前的温度,并说:“我的新温度将是那些温度的平均值。”这种方法的结构本身就反映了物理定律的局部性。这是物理学和计算之间一种美丽的对应关系。

然而,来自明智工程师的一句忠告:虽然雅可比方法是自然的匹配,但它并不总是最快的。对于一根简单的一维棒,产生的矩阵是三对角的,像托马斯算法这样的巧妙直接法可以在一次计算中解决系统,通常比雅可比方法收敛所需的时间快数百倍。像雅可比这样的迭代方法的真正威力在二维、三维甚至更高维度中得以释放,在这些维度中,系统的复杂性增长到让直接法在计算上变得不可能。在这些广阔的计算图景中,迭代法简单而稳健的步伐是我们唯一的希望。

善于提问的艺术

有时,一个方法的成功并不取决于方法本身,而在于我们如何提出问题。假设我们有一个方程组,雅可比方法顽固地拒绝收敛。这个问题就无解了吗?完全不是。可能只是我们写方程的顺序“不得当”。

考虑一个系统中,矩阵的对角线元素与其非对角线邻居相比很小。依赖对角线元素来主导的雅可比方法很可能会陷入困境。但如果我们能简单地重新排列方程呢?事实证明,一个简单的行置换——仅仅是改变我们写下方程的顺序——有时可以将一个矩阵转变为*对角占优*的矩阵,其中每个对角线元素在其所在行中都像国王一样,大于所有非对角线臣民的总和。对于这样的系统,雅可比方法的收敛性是有保证的。这是一个深刻的教训:我们表示问题的方式与我们用来解决它的方法同样重要。

这种“帮助”求解器的想法引出了现代数值分析中最强大的概念之一:​​预处理​​。雅可比方法本身也可以从这个现代视角来看待。实际上,它是一种更通用方法——预处理理查森迭代——的一个特例,其中预处理器——即“辅助”矩阵——就是原始矩阵 AAA 的对角部分。预处理器 P=DP=DP=D 是整个矩阵 AAA 的一个近似,近似越好,收敛越快。

这提出了一个诱人的问题:原则上,我们是否总能找到一个预处理器,使得雅可比方法能够收敛,无论原始矩阵 AAA 有多糟糕?答案是响亮的“是”!如果我们选择预处理器为矩阵 AAA 本身,即 M=AM=AM=A,预处理后的系统就变得微不足道(Ix⃗=A−1b⃗I\vec{x} = A^{-1}\vec{b}Ix=A−1b),雅可比方法在一步之内就能收敛到精确解。当然,这纯粹是理论上的胜利,因为使用 AAA 作为预处理器等同于已经解决了问题。但它证明了通往解决方案的路径是存在的,并重新定义了实际的挑战:艺术不在于找到一个预处理器,而在于找到一个既能有效加速收敛,又在计算上廉价易用的预处理器。

网络世界:作为局部对话的雅可比方法

让我们换个角度。一个稀疏矩阵不仅仅是一个数字块;它是一个网络的蓝图。变量的索引 1,2,…,n1, 2, \ldots, n1,2,…,n 是图的节点(或顶点)。如果矩阵元素 aija_{ij}aij​ 非零,则节点 iii 和节点 jjj 之间存在一条边。在这个视角下,我们的热棒问题变成了一个简单的线图。社交网络上的友谊网、互联网上页面间的链接、大脑中神经元间的连接——所有这些都可以用巨大的稀疏矩阵来表示。

从这个观点来看,雅可比迭代转变为一种非凡的东西:一个​​同步消息传递算法​​。在每一步中,网络中的每个节点都执行一个简单的任务:它将其当前值“发送”给所有直接邻居,“接收”它们的值,然后仅根据它收到的信息和自身的局部数据计算其新值。

这是一个深度去中心化的过程。没有中央协调者。节点1不需要知道节点1,000,000的值来更新自己;它只需要从它的直接朋友那里获取信息。这使得雅可比方法“易于并行化”。你可以将网络的不同部分分配给超级计算机上的不同处理器,它们可以同时计算它们的新值,只需在每一步结束时与它们的直接邻居交换信息。每个节点的计算工作量只取决于它的连接数(它的度),而不是网络的总大小。这种局部性和并行性,就是为什么雅可比迭代的精神在为海量数据和分布式计算设计的算法中得以延续的原因。

在这里,我们也看到了它与密切相关的 Gauss-Seidel 方法之间一个美丽的对比。在 Gauss-Seidel 方法中,一旦一个节点计算出它的新值,这个“更新鲜”的信息就会立即被序列中的下一个节点使用。虽然这通常会加速收敛,但它引入了一种依赖性:节点 iii 在节点 i−1i-1i−1 完成其工作之前无法开始。它创建了一个破坏雅可比方案优美并行性的顺序链。这是计算中的一个经典权衡:顺序过程的更快收敛与并行过程的可扩展能力之间的权衡。

平滑器的秘密生活

也许雅可比方法最令人惊讶和强大的现代应用是它在一个更大、更强大的机器——​​多重网格法​​——中扮演的一个齿轮角色。

考虑图的拉普拉斯矩阵,这是网络科学中的一个基本对象,定义为 L=D−AL = D-AL=D−A。如果我们试图使用标准的雅可比方法来解决系统 Lx⃗=b⃗L\vec{x} = \vec{b}Lx=b ,我们会发现一个奇怪的结果:迭代矩阵的谱半径恰好为1。该方法处于稳定性的刀刃上,无法可靠地收敛。

但更深入的观察揭示了一些有趣的事情。雅可比迭代难以消除的误差分量是那些平滑、缓变、低频的分量。然而,那些锯齿状、快速振荡、高频的误差分量却被非常有效地衰减了。这种对低频的“选择性失聪”和对高频的“敏锐听觉”使得雅可比迭代成为一个优秀的​​平滑器​​。

在多重网格算法中,我们不要求平滑器解决整个问题。我们只要求它做它最擅长的事情:清理高频噪声。经过几次雅可比迭代后,剩余的误差变得平滑。这个平滑的误差可以在一个更粗的网格上被准确地表示,在那个网格上问题更小,解决起来也更便宜。这种多层次策略——平滑、限制到粗网格、求解,然后校正回细网格——是解决源自物理模型的这类方程的最快已知方法之一。

即使在这里,我们也可以改进雅可比的性能。通过引入一个简单的阻尼参数 ω\omegaω,我们创造了​​阻尼雅可比法​​。通过巧妙地选择 ω\omegaω(通常是像 ω=2/3\omega = 2/3ω=2/3 这样的值),我们可以移动迭代矩阵的特征值,以更积极地消除高频误差,将一个不错的平滑器变成一个优秀的平滑器。

因此,一个单独看来平庸的算法——收敛缓慢且有时不稳定——当被置于正确的上下文中并被赋予正确的工作时,就成了一个不可或缺的组成部分。这是一个关于发现特殊才能并将其付诸实践的故事,一个美丽地说明了不同算法思想如何结合起来创造出比其各部分之和强大得多的东西。雅可比方法的简单局部平均,诞生于一个多世纪以前,今天仍在努力工作,为我们这个时代最快的求解器铺平道路。