分块矩阵的SOR迭代法解线性方程组
我将为您讲解分块矩阵的逐次超松弛(SOR)迭代法,这是一种求解大型稀疏线性方程组的高效算法。
问题描述
考虑大型线性方程组Ax = b,其中A是n×n矩阵。当A是分块三对角形式时:
A =
⎡ D₁ U₁ 0 ... 0 ⎤
⎢ L₁ D₂ U₂ ... 0 ⎢
⎢ 0 L₂ D₃ ... 0 ⎢
⎢ ⋮ ⋮ ⋮ ⋱ ⋮ ⎢
⎣ 0 0 0 L_{m-1} D_m ⎦
其中每个Dᵢ是p×p子矩阵,Lᵢ和Uᵢ是相应维度的子矩阵,我们需要求解x = [x₁, x₂, ..., xₘ]ᵀ。
算法原理
SOR方法是对Gauss-Seidel迭代的加速,通过引入松弛因子ω来加快收敛。对于分块矩阵,我们将这一思想扩展到子矩阵级别。
迭代格式推导
-
基本分裂
将矩阵A分裂为:A = D - L - U
其中D是块对角矩阵,L是严格块下三角矩阵,U是严格块上三角矩阵。 -
迭代格式
分块SOR迭代格式为:
xᵢ⁽ᵏ⁺¹⁾ = (1-ω)xᵢ⁽ᵏ⁾ + ωDᵢ⁻¹[bᵢ - Σⱼ<ᵢ Lᵢⱼxⱼ⁽ᵏ⁺¹⁾ - Σⱼ>ᵢ Uᵢⱼxⱼ⁽ᵏ⁾]
具体计算步骤
步骤1:初始化
- 设置初始猜测x⁽⁰⁾ = [x₁⁽⁰⁾, x₂⁽⁰⁾, ..., xₘ⁽⁰⁾]ᵀ
- 选择松弛因子ω(通常1<ω<2)
- 设置收敛容差ε和最大迭代次数
步骤2:迭代计算
对于k = 0,1,2,...直到收敛:
对于i = 1,2,...,m:
-
计算残差向量:
rᵢ = bᵢ - Σⱼ=1ⁱ⁻¹ Lᵢⱼxⱼ⁽ᵏ⁺¹⁾ - Σⱼ=1ᵐ Uᵢⱼxⱼ⁽ᵏ⁾ -
求解块方程组:
DᵢΔxᵢ = rᵢ
由于Dᵢ是p×p矩阵,可用直接法求解 -
更新解:
xᵢ⁽ᵏ⁺¹⁾ = (1-ω)xᵢ⁽ᵏ⁾ + ωΔxᵢ
步骤3:收敛判断
计算相对误差:‖x⁽ᵏ⁺¹⁾ - x⁽ᵏ⁾‖/‖x⁽ᵏ⁾‖ < ε
若满足则停止,否则继续迭代
关键技术与优化
-
松弛因子选择
最优松弛因子ωₒₚₜ = 2/[1+√(1-ρ(J)²)]
其中ρ(J)是Jacobi迭代矩阵的谱半径 -
块方程组求解
由于每个Dᵢ规模较小,可采用:
- 若Dᵢ对称正定:Cholesky分解
- 一般情况:LU分解
- 若Dᵢ有特殊结构:利用其特性
- 收敛性分析
分块SOR收敛的充分条件是A为块严格对角占优:
‖Dᵢ⁻¹‖(Σⱼ≠ᵢ ‖Aᵢⱼ‖) < 1
数值示例
考虑4×4分块矩阵,每块2×2:
D₁ = [4,1; 1,4], D₂ = [5,2; 2,5]
L₁ = [1,0; 0,1], U₁ = [1,0; 0,1]
取ω=1.2,初始猜测为零向量,经10次迭代后误差小于10⁻⁶。
算法优势
- 比点SOR收敛更快
- 保持矩阵稀疏性
- 适合并行计算
- 对病态系统有较好稳定性
这种方法特别适用于来自偏微分方程数值解的大型稀疏线性方程组。