Jacobi迭代法解线性方程组
题目描述
Jacobi迭代法是一种用于求解线性方程组 \(A\mathbf{x} = \mathbf{b}\) 的经典迭代算法,其中 \(A\) 是 \(n \times n\) 系数矩阵,\(\mathbf{x}\) 是未知向量,\(\mathbf{b}\) 是常数向量。该方法适用于对角占优矩阵(即每个主对角线元素的绝对值大于该行其他元素绝对值之和),通过将系数矩阵 \(A\) 分解为对角矩阵 \(D\)、严格下三角矩阵 \(L\) 和严格上三角矩阵 \(U\)(即 \(A = D + L + U\)),逐步迭代逼近解。其核心思想是每次迭代中,利用前一次迭代的解向量更新当前解。
解题过程循序渐进讲解
步骤1:分解系数矩阵
将矩阵 \(A\) 拆分为三部分:
- \(D\):仅包含 \(A\) 的主对角线元素(\(D_{ii} = A_{ii}\),其余元素为0)。
- \(L\):\(A\) 的严格下三角部分(主对角线以下元素,主对角线为0)。
- \(U\):\(A\) 的严格上三角部分(主对角线以上元素,主对角线为0)。
例如,对于3×3矩阵:
\[A = \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{pmatrix}, \quad D = \begin{pmatrix} a_{11} & 0 & 0 \\ 0 & a_{22} & 0 \\ 0 & 0 & a_{33} \end{pmatrix}, \quad L = \begin{pmatrix} 0 & 0 & 0 \\ a_{21} & 0 & 0 \\ a_{31} & a_{32} & 0 \end{pmatrix}, \quad U = \begin{pmatrix} 0 & a_{12} & a_{13} \\ 0 & 0 & a_{23} \\ 0 & 0 & 0 \end{pmatrix}. \]
步骤2:构造迭代格式
由 \(A\mathbf{x} = (D + L + U)\mathbf{x} = \mathbf{b}\),移项得 \(D\mathbf{x} = \mathbf{b} - (L + U)\mathbf{x}\)。假设当前迭代为第 \(k\) 步,解向量为 \(\mathbf{x}^{(k)}\),则下一步迭代公式为:
\[\mathbf{x}^{(k+1)} = D^{-1} \left( \mathbf{b} - (L + U) \mathbf{x}^{(k)} \right). \]
由于 \(D\) 是对角矩阵,其逆矩阵 \(D^{-1}\) 可直接通过取主对角线元素的倒数得到(需确保 \(A_{ii} \neq 0\))。
步骤3:写出分量形式
迭代公式可展开为每个分量的更新规则。对于第 \(i\) 个分量(\(i = 1, 2, \dots, n\)):
\[x_i^{(k+1)} = \frac{1}{A_{ii}} \left( b_i - \sum_{j \neq i} A_{ij} x_j^{(k)} \right), \]
其中求和符号 \(\sum_{j \neq i}\) 表示对除 \(j = i\) 外的所有列索引求和。此公式直观表示:用当前其他变量的解 \(x_j^{(k)}\) 计算残差,再通过主对角线元素归一化。
步骤4:设置初始解与收敛条件
- 初始解 \(\mathbf{x}^{(0)}\) 通常设为零向量或近似解。
- 迭代终止条件常用两种形式:
- 残差条件:\(\| \mathbf{b} - A\mathbf{x}^{(k)} \| < \epsilon\)(\(\epsilon\) 为预设容差,如 \(10^{-6}\))。
- 解的变化条件:\(\| \mathbf{x}^{(k+1)} - \mathbf{x}^{(k)} \| < \epsilon\)。
其中 \(\| \cdot \|\) 可选用2-范数或无穷范数。
步骤5:执行迭代计算
以具体例子演示。求解方程组:
\[\begin{cases} 10x_1 + 2x_2 + x_3 = 15 \\ x_1 + 10x_2 + 2x_3 = 16 \\ x_1 + 2x_2 + 10x_3 = 13 \end{cases} \]
矩阵 \(A\) 满足对角占优(例如第一行:\(|10| > |2| + |1|\))。
- 初始化解:设 \(\mathbf{x}^{(0)} = (0, 0, 0)^T\)。
- 第一次迭代(\(k=0\)):
- \(x_1^{(1)} = \frac{1}{10}(15 - 2 \cdot 0 - 1 \cdot 0) = 1.5\)
- \(x_2^{(1)} = \frac{1}{10}(16 - 1 \cdot 0 - 2 \cdot 0) = 1.6\)
- \(x_3^{(1)} = \frac{1}{10}(13 - 1 \cdot 0 - 2 \cdot 0) = 1.3\)
更新解向量为 \((1.5, 1.6, 1.3)^T\)。
- 第二次迭代(\(k=1\)):
- \(x_1^{(2)} = \frac{1}{10}(15 - 2 \cdot 1.6 - 1 \cdot 1.3) = 1.11\)
- \(x_2^{(2)} = \frac{1}{10}(16 - 1 \cdot 1.5 - 2 \cdot 1.3) = 1.19\)
- \(x_3^{(2)} = \frac{1}{10}(13 - 1 \cdot 1.5 - 2 \cdot 1.6) = 0.83\)
解向量更新为 \((1.11, 1.19, 0.83)^T\)。
- 继续迭代直至满足收敛条件。例如,经过10次迭代后解接近精确解 \((1, 1, 1)^T\)。
步骤6:收敛性分析
Jacobi迭代的收敛性由迭代矩阵 \(G = D^{-1}(L + U)\) 的谱半径(特征值的最大绝对值)决定。若谱半径 \(\rho(G) < 1\),则算法收敛。对角占优是充分条件之一。
关键点总结
- Jacobi迭代法简单易实现,但收敛速度较慢(尤其对于非对角占优矩阵)。
- 每次迭代需保存前一次解向量,且所有分量可并行计算(因更新互不依赖)。
- 若对角元素为零,需通过行交换调整矩阵(如与高斯消元法结合)。