@FanJin
2025-11-13T08:27:53.000000Z
字数 2207
阅读 120
求解线性方程组:
其中:
- 是 系数矩阵
- 是已知向量
- 是待求解向量
具体到我们的问题:
将矩阵 分解为三个部分:
其中:
- : 的对角线部分
- : 的严格下三角部分(取负号)
- : 的严格上三角部分(取负号)
具体形式:
原方程 可写为:
移项得:
高斯-赛德尔迭代法的核心思想是:在计算第 次迭代时,使用已经更新的分量值。
因此,迭代格式为:
整理得:
最终得到矩阵形式的迭代公式:
对于第 次迭代的第 个分量:
其中:
-
- (对角元素非零)
在代码中,迭代公式体现为:
for i in range(n):indices1 = list(range(0, i)) # j = 0, 1, ..., i-1indices2 = list(range(i + 1, n)) # j = i+1, i+2, ..., n-1x_next[i] = (b[i] - np.sum(A[i, indices1] * x_next[indices1])- np.sum(A[i, indices2] * x_last[indices2])) / A[i, i]
对应数学公式:
注意:由于Python索引从0开始,公式中的索引范围与数学表示略有不同。
高斯-赛德尔迭代法不能并行计算的主要原因在于其迭代过程具有内在的顺序依赖性。
具体来说,在计算第 次迭代的分量 时,该方法立即使用已经更新过的前几个分量 ,而不是像雅可比(Jacobi)迭代法那样全部使用上一次迭代的老值。这种“最新值优先”的策略提高了收敛速度,但也导致了计算必须按顺序进行:
因此,每个分量的更新都依赖于前面分量在当前迭代中的新值,这种数据依赖关系使得各个分量无法同时独立计算,从而无法实现真正的并行化。
相比之下,雅可比迭代法在计算 时完全基于 ,所有分量之间相互独立,适合并行计算。而高斯-赛德尔为了追求更快的收敛性,牺牲了并行性。
高斯-赛德尔迭代法由于在同一步迭代中前后分量之间存在强耦合与数据依赖,必须串行执行,因而不适合并行计算。这是其算法结构上的本质限制。