文章目录
雅可比迭代法(Jacobi)
对于方程组 A x = b \mathbf{Ax=b} Ax=b
将线性方程组的矩阵A分解为
A
=
L
+
D
+
U
A = L+D+U
A=L+D+U
其中
L
=
(
0
0
⋯
0
0
a
21
0
⋯
0
0
a
31
a
32
⋯
0
0
⋮
⋮
⋮
⋮
a
n
1
a
n
2
⋯
a
n
,
n
−
1
0
)
\boldsymbol{L}=\left(\begin{array}{ccccc} 0 & 0 & \cdots & 0 & 0 \\ a_{21} & 0 & \cdots & 0 & 0 \\ a_{31} & a_{32} & \cdots & 0 & 0 \\ \vdots & \vdots & & \vdots & \vdots \\ a_{n 1} & a_{n 2} & \cdots & a_{n, n-1} & 0 \end{array}\right)
L=⎝⎜⎜⎜⎜⎜⎛0a21a31⋮an100a32⋮an2⋯⋯⋯⋯000⋮an,n−1000⋮0⎠⎟⎟⎟⎟⎟⎞
D
=
(
a
11
0
0
⋯
0
0
a
22
0
⋯
0
0
0
a
33
⋯
0
⋮
⋮
⋮
⋱
⋮
0
0
0
⋯
a
n
n
)
\boldsymbol{D}=\left(\begin{array}{ccccc} a_{11} & 0 & 0 & \cdots &0 \\ 0 & a_{22} & 0 & \cdots & 0 \\ 0 & 0 & a_{33} & \cdots & 0 \\ \vdots & \vdots & \vdots &\ddots & \vdots \\ 0 & 0 & 0 & \cdots & a_{nn} \end{array}\right)
D=⎝⎜⎜⎜⎜⎜⎛a1100⋮00a220⋮000a33⋮0⋯⋯⋯⋱⋯000⋮ann⎠⎟⎟⎟⎟⎟⎞
U
=
(
0
a
12
a
13
⋯
a
1
n
0
0
a
23
⋯
a
2
n
⋮
⋮
⋮
⋮
0
0
0
⋯
a
n
−
1
,
n
0
0
0
⋯
0
)
\boldsymbol{U}=\left(\begin{array}{ccccc} 0 & a_{12} & a_{13} & \cdots & a_{1 n} \\ 0 & 0 & a_{23} & \cdots & a_{2 n} \\ \vdots & \vdots & \vdots & & \vdots \\ 0 & 0 & 0 & \cdots & a_{n-1, n} \\ 0 & 0 & 0 & \cdots & 0 \end{array}\right)
U=⎝⎜⎜⎜⎜⎜⎛00⋮00a120⋮00a13a23⋮00⋯⋯⋯⋯a1na2n⋮an−1,n0⎠⎟⎟⎟⎟⎟⎞
迭代公式的矩阵形式
x
k
+
1
=
B
J
X
k
+
f
J
\mathbf {x^{k+1} = B_JX^k+f_J}
xk+1=BJXk+fJ
根据如上形式的分解,得:
B
J
=
I
−
D
−
1
A
f
J
=
D
−
1
b
\mathbf{B_J = I - D^{-1}A}\\ \quad\\ \mathbf{f_J = D^{-1}b}
BJ=I−D−1AfJ=D−1b
即
x
k
+
1
=
(
I
−
D
−
1
A
)
X
k
+
D
−
1
b
\mathbf {x^{k+1} = (I - D^{-1}A)X^k+D^{-1}b}
xk+1=(I−D−1A)Xk+D−1b
编程计算公式:
x i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 , j ≠ i n a i j x j ( k ) ) , i = 1 , 2 , ⋯ , n x_{i}^{(k+1)}=\frac{1}{a_{i i}}\left(b_{i}-\sum_{j=1, j \neq i}^{n} a_{i j} x_{j}^{(k)}\right), \quad i=1,2, \cdots, n xi(k+1)=aii1⎝⎛bi−j=1,j=i∑naijxj(k)⎠⎞,i=1,2,⋯,n
迭代思路:
将第
i
i
i个方程中的
x
i
x_i
xi提出来,作为
x
i
x_i
xi的迭代式。例如:
a
3
x
3
=
b
−
(
a
1
x
1
+
a
2
x
2
+
a
4
x
4
+
.
.
.
)
a_3x_3 =b - (a_1x_1+a_2x_2+a_4x_4+...)
a3x3=b−(a1x1+a2x2+a4x4+...)
高斯-赛德尔迭代法(Gauss-Seidel)
从直观上看,在收敛的前提下,新的分量
x
1
k
+
1
,
x
2
k
+
1
,
x
3
k
+
1
,
.
.
.
,
x
n
k
+
1
x_1^{k+1},x_2^{k+1},x_3^{k+1},...,x_n^{k+1}
x1k+1,x2k+1,x3k+1,...,xnk+1会更好,更精确。根据此思路,有:
X
(
k
+
1
)
=
−
(
D
+
L
)
−
1
U
X
(
k
)
+
(
D
+
L
)
−
1
b
\boldsymbol{X}^{(k+1)}=-(\boldsymbol{D}+\boldsymbol{L})^{-1} \boldsymbol{U} \boldsymbol{X}^{(k)}+(\boldsymbol{D}+\boldsymbol{L})^{-1} \boldsymbol{b}
X(k+1)=−(D+L)−1UX(k)+(D+L)−1b
其分量形式为:
x
i
(
k
+
1
)
=
1
a
i
i
(
b
i
−
∑
j
=
1
i
−
1
a
i
j
x
j
(
k
+
1
)
−
∑
j
=
i
+
1
n
a
i
j
x
j
(
k
)
)
,
i
=
1
,
2
,
⋯
,
n
x_{i}^{(k+1)}=\frac{1}{a_{i i}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i+1}^{n} a_{i j} x_{j}^{(k)}\right), \quad i=1,2, \cdots, n
xi(k+1)=aii1(bi−j=1∑i−1aijxj(k+1)−j=i+1∑naijxj(k)),i=1,2,⋯,n
无论是雅可比迭代法还是高斯-赛德尔迭代法,只有在迭代法收敛的条件下才能进行迭代运算。下面介绍判定迭代法收敛的方法。
迭代法的收敛性
迭代法收敛性基本定义
对
x
=
B
x
+
f
\mathbf{x = Bx+f}
x=Bx+f 迭代法收敛的充分必要条件为
谱
半
径
ρ
(
B
)
<
1
谱半径\rho(\mathbf B)<1
谱半径ρ(B)<1
与初始向量的选取和右端向量 无关。
注:相关定理指出,当雅可比矩阵 B J = I − D − 1 A \mathbf{B_J = I - D^{-1}A} BJ=I−D−1A为非负矩阵,雅可比迭代法和高斯-赛德尔迭代法同时收敛或发散。
收敛速度
R
(
B
)
=
−
l
n
(
ρ
(
B
)
)
R(B) = -ln(\rho(B))
R(B)=−ln(ρ(B))
为迭代法的收敛速度。
一般,当n较大时,迭代矩阵B的特征值计算较为复杂,迭代法收敛性基本定义条件较难验证,因此可利用定理结论
ρ
(
b
)
≤
∣
∣
B
∣
∣
\rho(b) \le||B||
ρ(b)≤∣∣B∣∣作为
ρ
(
B
)
\rho(B)
ρ(B)上界的一种估计。
于是得如下定理
迭代法充分条件1
若
∣
∣
B
∣
∣
<
1
||B||<1
∣∣B∣∣<1则迭代公式
x
=
B
x
+
f
x = Bx+f
x=Bx+f收敛
(注:是充分条件,不是必要条件)
在实际计算中可将 ∣ ∣ X ( k ) − X ( k − 1 ) ∣ ∣ ∞ < ε ||X^{(k)}-X^{(k-1)}||_{\infty} < \varepsilon ∣∣X(k)−X(k−1)∣∣∞<ε作为终止条件。
迭代法充分条件2
若 A x = b Ax=b Ax=b的系数矩阵 A A A为 严格对角占优矩阵 或 不可约对角占优矩阵,则雅可比迭代法和高斯-赛德尔迭代法收敛。
迭代法其他收敛条件
- 若 A x = b Ax=b Ax=b的系数矩阵 A A A对称正定,则高斯-赛德尔迭代法收敛。
- 若 A A A对称正定, 2 D − A 2D-A 2D−A也对称正定(D为A的对角元组成的对角阵),则雅可比迭代法收敛。
- 若 A A A对称正定, 2 D − A 2D-A 2D−A非正定,则雅可比迭代法 不收敛。
逐次超松弛迭代是一种加速迭代的技术,下面以Jacobi迭代法来阐述这种收敛技术。
JOR迭代法
将
x
k
+
1
=
(
I
−
D
−
1
A
)
X
k
+
D
−
1
b
\mathbf {x^{k+1} = (I - D^{-1}A)X^k+D^{-1}b}
xk+1=(I−D−1A)Xk+D−1b
加入松弛因子
ω
\omega
ω ,得:
x
k
+
1
=
(
I
−
ω
D
−
1
A
)
X
k
+
ω
D
−
1
b
\mathbf {x^{k+1} = (I - \omega D^{-1}A)X^k+\omega D^{-1}b}
xk+1=(I−ωD−1A)Xk+ωD−1b
其分量形式为:
x
i
(
k
+
1
)
=
x
i
(
k
)
+
ω
a
i
i
(
b
i
−
∑
j
=
1
n
a
i
j
x
j
(
k
)
)
,
i
=
1
,
2
,
⋯
,
n
x_{i}^{(k+1)}=x_{i}^{(k)}+\frac{\omega}{a_{i i}}\left(b_{i}-\sum_{j=1}^{n} a_{i j} x_{j}^{(k)}\right), \quad i=1,2, \cdots, n
xi(k+1)=xi(k)+aiiω(bi−j=1∑naijxj(k)),i=1,2,⋯,n
当 Jacobi 迭代方法
- 迭代矩阵 B J \boldsymbol{B}_{J} BJ 的特征值为实数
- B J \boldsymbol{B}_{J} BJ 的谱半径 ρ ( B J ) < 1 \rho\left(\boldsymbol{B}_{J}\right)<1 ρ(BJ)<1
JOR 迭代方法有最佳松弛因子为
ω
o
p
t
=
2
2
−
λ
max
B
J
−
λ
min
B
J
\omega_{\mathrm{opt}}=\frac{2}{2-\lambda_{\max }^{B_{J}}-\lambda_{\min }^{B_{J}}}
ωopt=2−λmaxBJ−λminBJ2
JOB收敛准则
若Jacobi迭代法收敛,则松弛因子 ω ∈ [ 0 , 1 ) \omega \in [0,1) ω∈[0,1) 的JOB迭代法也收敛。
SOR迭代法
以下, 我们将 Gauss-Seidel 迭代法改造为一类 逐次超松弛 迭代格式.
将Gauss-Seidel 迭代法
X
(
k
+
1
)
=
−
(
D
+
L
)
−
1
U
X
(
k
)
+
(
D
+
L
)
−
1
b
\boldsymbol{X}^{(k+1)}=-(\boldsymbol{D}+\boldsymbol{L})^{-1} \boldsymbol{U} \boldsymbol{X}^{(k)}+(\boldsymbol{D}+\boldsymbol{L})^{-1} \boldsymbol{b}
X(k+1)=−(D+L)−1UX(k)+(D+L)−1b
转化为如下形式
D
X
(
k
+
1
)
=
D
X
(
k
)
+
[
b
−
L
X
(
k
+
1
)
−
(
D
+
U
)
X
(
k
)
]
\boldsymbol{D} \boldsymbol{X}^{(k+1)}=\boldsymbol{D} \boldsymbol{X}^{(k)}+\left[\boldsymbol{b}-\boldsymbol{L} \boldsymbol{X}^{(k+1)}-(\boldsymbol{D}+\boldsymbol{U}) \boldsymbol{X}^{(k)}\right]
DX(k+1)=DX(k)+[b−LX(k+1)−(D+U)X(k)]
今在上式右端引人松弛因子
ω
>
0
\omega>0
ω>0 , 化简后得 :
X
(
k
+
1
)
=
(
D
+
ω
L
)
−
1
{
[
(
1
−
ω
)
D
−
ω
U
]
X
(
k
)
+
ω
b
}
\boldsymbol{X}^{(k+1)}=(\boldsymbol{D}+\omega \boldsymbol{L})^{-1}\left\{[(1-\omega) \boldsymbol{D}-\omega \boldsymbol{U}] \boldsymbol{X}^{(k)}+\omega \boldsymbol{b}\right\}
X(k+1)=(D+ωL)−1{[(1−ω)D−ωU]X(k)+ωb}
其分量形式为:
x
i
(
k
+
1
)
=
x
i
(
k
)
+
ω
a
i
i
(
b
i
−
∑
j
=
1
i
−
1
a
i
j
x
j
(
k
+
1
)
−
∑
j
=
i
n
a
i
j
x
j
(
k
)
)
,
i
=
1
,
2
,
⋯
,
n
x_{i}^{(k+1)}=x_{i}^{(k)}+\frac{\omega}{a_{i i}}\left(b_{i}-\sum_{j=1}^{i-1} a_{i j} x_{j}^{(k+1)}-\sum_{j=i}^{n} a_{i j} x_{j}^{(k)}\right) ,i=1,2, \cdots, n
xi(k+1)=xi(k)+aiiω(bi−j=1∑i−1aijxj(k+1)−j=i∑naijxj(k)),i=1,2,⋯,n
SOR 迭代方法有最佳松弛因子为
ω
o
p
t
=
2
1
+
1
−
ρ
2
[
−
D
−
1
(
L
+
U
)
]
\omega_{\mathrm{opt}}=\frac{2}{1+\sqrt{1-\rho^{2}\left[-D^{-1}(L+U)\right]}}
ωopt=1+1−ρ2[−D−1(L+U)]2