高斯-赛德尔法 模拟器 返回
数值线性代数模拟器

高斯-赛德尔法 模拟器 — 线性方程组迭代求解

用高斯-赛德尔迭代法求解3元1次方程组Ax=b,可视化(x,y,z)的收敛轨迹和误差对数衰减。在0.5~1.9范围内调整SOR松弛因子ω,直观体验最优ω的存在。

参数设置
初始猜测值 x_0 (3个分量通用)
最大迭代次数
容差 1e^-n
SOR松弛因子 ω
A = [[2, 1, 1], [1, 3, 1], [1, 1, 4]]
b = [4, 5, 6]
真实解 x* = (1, 1, 1)

默认值(x_0=0, ω=1, tol=1e-6)约需11次迭代收敛。将ω调整到1.1~1.2可减少迭代次数,但ω>1.5时会出现振荡导致收敛变慢。ω≥2时发散。

计算结果
解 x
解 y
解 z
迭代次数

迭代轨迹(分量x,y,z)

横轴 迭代序号k,纵轴 分量值。红=x,绿=y,蓝=z。点线为真实解(1,1,1)。每次迭代用圆点标记。ω改变时振荡幅度和收敛速度都会变化。

误差 ||x^(k+1)-x^(k)||_∞ 的收敛(log10)

横轴 迭代序号n,纵轴 连续迭代间的无穷范数误差取log10。直线下降表示线性收敛。红破线为容差tol。斜率越陡收敛越快(最优ω附近)。

理论与主要公式

高斯-赛德尔迭代(分量形式):

$$x_{i}^{(k+1)} = \frac{1}{a_{ii}}\left(b_i - \sum_{j\lt i} a_{ij} x_{j}^{(k+1)} - \sum_{j\gt i} a_{ij} x_{j}^{(k)}\right)$$

SOR(逐次超松弛):

$$x_{i}^{(k+1)} = (1-\omega)\,x_{i}^{(k)} + \omega \cdot x_{i,\text{GS}}^{(k+1)}$$

矩阵形式(D对角,L下三角,U上三角):

$$(D + \omega L)\,x^{(k+1)} = \omega b - [\omega U + (\omega-1)D]\,x^{(k)}$$

$\omega=1$为纯高斯-赛德尔法,$1\lt \omega\lt 2$为超松弛,$0\lt \omega\lt 1$为欠松弛。Kahan定理指出$\omega \notin (0,2)$时必然发散。最优$\omega_{\text{opt}} = 2/(1+\sqrt{1-\rho_{GS}^{2}})$(其中$\rho_{GS}$为高斯-赛德尔迭代矩阵的谱半径)。

高斯-赛德尔法模拟器简介

🙋
默认值显示11次迭代就能收敛到(1,1,1)。这和直接计算逆矩阵相比有什么优势呢?
🎓
问得好。3元的话直接法(LU分解)一瞬间就算完,但CAE领域出现的方程组是百万元到十亿元级。直接法的记忆和计算复杂度都是O(N³),会爆炸。对角占优或稀疏的大规模系统中,"用迭代逐步逼近"的方法成本远低。高斯-赛德尔法是最古典的迭代解法,每个分量按顺序"用最新值"更新,一次迭代只需O(非零元素个数)。有限元法的刚度矩阵99%都是零的稀疏矩阵,这样的情况下迭代法比直接法快好几个数量级。
🙋
我把ω调到1.2,迭代次数确实掉到10次左右了。这就是SOR吗?
🎓
对,就是SOR(逐次超松弛法)。公式是 x^(k+1) = (1-ω)x^(k) + ω·x_GS^(k+1),把高斯-赛德尔的新值"略微过头"地前进。1<ω<2是超松弛,能显著加速收敛。最优ω由 ω_opt = 2/(1+√(1−ρ²)) 给出,其中ρ是高斯-赛德尔迭代矩阵的谱半径。但实际上通过扫描找到迭代次数最少的ω更常用。本工具的"扫描ω"按钮就是这样做的,让你看到在0.5→1.9范围内,反复迭代次数的谷值在哪儿。
🙋
ω设成1.95的时候振荡了,就收不了了。ω太大就不行?
🎓
完全正确。Kahan定理说"SOR收敛的必要条件是0<ω<2",ω=2或超过2就必然发散。而且最优ω因问题而异。本工具的A=[[2,1,1],[1,3,1],[1,1,4]]对角占优但支配度不强,所以ω_opt在1.1~1.3之间。而泊松方程有限差分矩阵的SOR最优ω会达到1.7~1.9。真实CAE中现在多数用共轭梯度法(CG)或前处理共轭梯度法(PCG),但"逐分量即时更新"的思想还在多重网格法的光滑化器里活跃着。
🙋
初始值x_0改成10的时候,迭代次数增到了16次。初始值影响这么大?
🎓
对角占优矩阵的高斯-赛德尔法是"线性收敛",每次迭代误差缩小ρ倍(ρ<1)。初始值离真解越远,起始误差越大,要把它降到容差以下需要更多迭代。大概需要的迭代次数约为 log(初误差/容差) / log(1/ρ)。相比之下牛顿法是2阶收敛(误差每次迭代平方缩小),但代价是要计算雅可比。高斯-赛德尔的优点是"不求导""实现简单""易于并行化"。现在CAE的主流做法是在共轭梯度法里夹几次高斯-赛德尔迭代作前处理,这样的混合方案最高效。

物理模型与主要公式

高斯-赛德尔法由Carl Friedrich Gauss(1823年私信)和Philipp Ludwig von Seidel(1874年发表)独立发现,是求解线性方程组Ax=b的迭代方法。与雅可比法不同,它在同一次迭代内立即重用已更新的分量。

$$x_{i}^{(k+1)} = \frac{1}{a_{ii}}\left(b_i - \sum_{j\lt i} a_{ij} x_{j}^{(k+1)} - \sum_{j\gt i} a_{ij} x_{j}^{(k)}\right)$$

对角元素$a_{ii}$不能为零。本工具的矩阵A=[[2,1,1],[1,3,1],[1,1,4]]对角元素为2,3,4,满足对角占优条件 |a_ii| ≥ Σ_{j≠i} |a_ij|(2≥2, 3≥2, 4≥2),属于广义对角占优且对称正定,因此SOR在整个0<ω<2范围内收敛。

SOR(逐次超松弛法)用松弛因子ω对高斯-赛德尔更新值和前一值进行加权:

$$x_{i}^{(k+1)} = (1-\omega)\,x_{i}^{(k)} + \omega \cdot x_{i,\text{GS}}^{(k+1)}$$

ω=1为纯高斯-赛德尔,1<ω<2为超松弛(加速收敛),0<ω<1为欠松弛(稳定收敛)。最优松弛因子为 ω_opt = 2/(1+√(1−ρ_GS²)),其中ρ_GS是高斯-赛德尔迭代矩阵G_GS = −(D+L)⁻¹ U的谱半径。

收敛判定通常采用连续迭代间差的无穷范数 ||x^(k+1) − x^(k)||_∞ < ε。本工具中 ε = 10^(−n)。

实际应用

有限元法(FEM)线性求解器:结构分析、热分析、电磁场分析离散化后产生巨大稀疏对称正定矩阵。Abaqus、ANSYS、COMSOL等商用软件内部使用前处理共轭梯度法(PCG)或GMRES,其中"前处理"经常采用SOR或对称SOR(SSOR)。SSOR前处理实现简单、内存效率高、对对角占优刚度矩阵稳定,两百万自由度级的结构分析仍很实用。

多重网格法的平滑化器:CFD(计算流体力学)的泊松方程(压力修正)或热传导问题的多重网格前处理中,各网格层执行"数次高斯-赛德尔迭代"进行平滑化是核心算法。Red-Black高斯-赛德尔法(跳棋式分割并行化)是目前GPU多重网格的标准工具,流体求解器压力步骤速度提升100倍以上。

电力潮流计算:交流潮流非线性方程求解时,先用线性化方程的高斯-赛德尔迭代得初值,这是经典方法。精度不如牛顿-拉夫逊法,但实现简单,初始收敛差的情况下也不易发散。日本电力公司的运行系统至今仍在应急评估中使用。

图像处理与层析成像重建:CT/MRI图像迭代重建法(ART, SART)的核心是高斯-赛德尔迭代。从投影数据重建图像的逆问题写成Ax=b,按像素值逐次更新。结合SOR能加快收敛,有助医疗影像高速化(降低辐射)。

常见误区与注意事项

最普遍的误解是"高斯-赛德尔法总是比雅可比法快"。对角占优矩阵确实快约2倍(渐近收敛速率比较),但对角占优不充分或支配度弱的矩阵中,高斯-赛德尔可能变慢甚至发散。本工具的A对称正定,两种都收敛,但CAE现场要先确认矩阵性质才能选迭代法。

第二个常见错误是"SOR最优ω能计算得出"。理论上ω_opt = 2/(1+√(1−ρ_GS²)),但计算ρ_GS本身是求特征值问题,比Ax=b还重。实务中常从经验初值(比如1.7~1.9)开始扫描,找到迭代次数最少的ω采用。本工具的扫描ω按钮正是这种实操方法。

第三个陷阱是"收敛判定 ||x^(k+1) − x^(k)||_∞ < ε 就够了"。欠松弛(ω小)时迭代间差小,但离真解仍远。严格做法是用残差范数 ||b − Ax^(k)||_2 / ||b||_2 < ε,但计算代价增加。实用中常采用"相对残差+迭代差"的混合判定。

常见问题

高斯-赛德尔法是一种将Ax=b按分量分解,同时立即使用最新x值逐次更新的迭代求解法。公式为 x_i^(k+1) = (1/a_ii)(b_i − Σ_{ji} a_ij x_j^(k))。本工具的默认例 A=[[2,1,1],[1,3,1],[1,1,4]]、b=[4,5,6] 是对角占优的,解为(1,1,1),从初始值(0,0,0)开始,当ω=1时约需11次迭代达到1e-6精度。
雅可比法仅使用前一次迭代的x值对所有分量进行一次更新。高斯-赛德尔法在同一次迭代内立即重新使用已更新的x_j^(k+1),因此对于对角占优矩阵通常比雅可比法快约2倍。本工具中ω=1是纯高斯-赛德尔法,1<ω<2是SOR(逐次超松弛),选择合适的ω可进一步加速收敛。
ω=1为纯高斯-赛德尔法,0<ω<1为欠松弛(稳定化收敛),1<ω<2为SOR(加速收敛)。最优ω由迭代矩阵G_GS的谱半径给出:ω_opt = 2/(1+√(1−ρ²)),但实际上通过扫描找到最少迭代次数对应的ω更为常见。本工具的ω扫描按钮可让您在0.5→1.9范围内动态调整,观察最优ω处的迭代次数谷值。
高斯-赛德尔法的收敛充分条件是:(1)A严格对角占优(|a_ii| > Σ_{j≠i} |a_ij|),或(2)A对称正定。对角元素过小或为零会导致发散。SOR中若ω≤0或ω≥2则必然发散(Kahan定理)。本工具的A=[[2,1,1],[1,3,1],[1,1,4]]满足(2−2=0、3−2=1、4−2=2)的广义对角占优且对称正定,因此在整个0<ω<2区间内安定收敛。

使用指南

  1. 用滑块设置初始值x0、y0、z0(通常在-10~10范围)
  2. 输入最大迭代次数(FEM分析通常500~2000次)
  3. 按指数设置收敛判定值(10^-6工程精度,10^-8高精度)
  4. 调整SOR松弛因子ω(0.5~1.9)优化收敛速度
  5. 点击执行按钮开始迭代计算,查看解x、y、z和迭代次数

具体计算示例

3×3方程组:3x+0.1y+0.2z=7.85、0.1x+7y-0.3z=-19.3、0.3x-0.2y+10z=71.4的情况,初始值(0,0,0)、容差10^-6、ω=1.2时,求得x=2.500、y=-2.800、z=7.000,约12次迭代收敛。当ω=1.0(标准高斯-赛德尔)需18次迭代,但最优ω=1.25时仅9次迭代,对于FEM大规模矩阵(100×100)计算时间可减少40%。

实务注意事项