雅可比迭代法解线性方程组
题目描述
给定一个n阶线性方程组 \(A\vec{x} = \vec{b}\),其中A是系数矩阵,\(\vec{x}\)是未知向量,\(\vec{b}\)是常数向量。要求使用雅可比迭代法求解该方程组的近似解。假设系数矩阵A的对角线元素均不为零,且迭代法收敛。
解题过程
- 算法原理
雅可比迭代法是一种基于矩阵分裂的迭代算法。将系数矩阵A分解为三个部分:- \(D\):A的对角线元素构成的对角矩阵
- \(L\):A的严格下三角部分(对角线为零)
- \(U\):A的严格上三角部分(对角线为零)
即 \(A = D + L + U\)。
原方程可改写为:
\[ D\vec{x} = \vec{b} - (L+U)\vec{x} \]
由于D可逆(对角线元素非零),得到迭代格式:
\[ \vec{x}^{(k+1)} = D^{-1} \left[ \vec{b} - (L+U)\vec{x}^{(k)} \right] \]
- 迭代公式的具体形式
设\(x_i^{(k)}\)表示第k次迭代中第i个未知量的近似值,迭代公式可写为分量形式:
\[ x_i^{(k+1)} = \frac{1}{a_{ii}} \left( b_i - \sum_{j \neq i} a_{ij} x_j^{(k)} \right), \quad i=1,2,\dots,n \]
即每次迭代时,用前一次迭代的所有分量计算新分量。
- 迭代步骤
- 步骤1:初始化。选择初始向量\(\vec{x}^{(0)}\)(通常设为零向量或粗略估计值),设定最大迭代次数\(N_{\text{max}}\)和误差容限\(\epsilon\)。
- 步骤2:进行第k次迭代。对每个\(i\)从1到n,计算:
\[ x_i^{(k+1)} = \frac{b_i - \sum_{j=1}^{i-1} a_{ij}x_j^{(k)} - \sum_{j=i+1}^{n} a_{ij}x_j^{(k)}}{a_{ii}} \]
注意求和时排除$ j=i $的项。
- 步骤3:检查收敛性。计算两次迭代的误差\(\|\vec{x}^{(k+1)} - \vec{x}^{(k)}\|\)(常用欧几里得范数或无穷范数)。若误差小于\(\epsilon\)或达到最大迭代次数,停止迭代。
- 步骤4:输出结果。若收敛,\(\vec{x}^{(k+1)}\)为近似解;否则提示未收敛。
- 收敛性说明
雅可比迭代收敛的充分条件是矩阵A严格对角占优(即每行对角线元素的绝对值大于该行其他元素绝对值之和),或A对称正定。若条件不满足,可能发散。
示例
解方程组:
\[\begin{cases} 10x_1 - x_2 + 2x_3 = 6 \\ -x_1 + 11x_2 - x_3 + 3x_4 = 25 \\ 2x_1 - x_2 + 10x_3 - x_4 = -11 \\ 3x_2 - x_3 + 8x_4 = 15 \end{cases} \]
- 迭代公式:
\[ \begin{aligned} x_1^{(k+1)} &= (6 + x_2^{(k)} - 2x_3^{(k)}) / 10 \\ x_2^{(k+1)} &= (25 + x_1^{(k)} + x_3^{(k)} - 3x_4^{(k)}) / 11 \\ x_3^{(k+1)} &= (-11 - 2x_1^{(k)} + x_2^{(k)} + x_4^{(k)}) / 10 \\ x_4^{(k+1)} &= (15 - 3x_2^{(k)} + x_3^{(k)}) / 8 \end{aligned} \]
- 从\(\vec{x}^{(0)} = (0,0,0,0)\)开始迭代,约10次后可得近似解\(\vec{x} \approx (1, 2, -1, 1)\)。