用分块循环约化法求 Ax=b
一、实验目的、内容
-
掌握数值方法
-
掌握循环约化法的基本思想, 用分块循环约化法解方程组 A x = b A x=b Ax=b
其中
A
=
(
D
−
I
q
−
I
q
D
⋱
⋱
⋱
−
I
q
−
I
q
D
)
A=\left(\begin{array}{cccc}D & -I_{q} & & \\ -I_{q} & D & \ddots & \\ & \ddots & \ddots & -I_{q} \\ & & -I_{q} & D\end{array}\right)
A=⎝⎜⎜⎛D−Iq−IqD⋱⋱⋱−Iq−IqD⎠⎟⎟⎞
是一个
2
k
−
1
2^{k}-1
2k−1 阶的分块方阵.
二、相关背景知识介绍
- 循环约化法的基本思想: 将问题的维数反复的减半, 直到得到一个关于末知子向量 x 2 k − 1 x_{2^{k-1}} x2k−1 的 q × q q \times q q×q 方程组.这个方程组通过标准方法解出.前面消去的 x i x_{i} xi 再通过向后回代法解出.
- 举例说明: 以
k
=
3
k=3
k=3 的情形举例说明
( D F F D F F D F F D F F D F F D F F D ) ( x 1 x 2 x 3 x 4 x 5 x 6 x 7 ) = ( b 1 b 2 b 3 b 4 b 5 b 6 b 7 ) (1) \left(\begin{array}{lllllll} D & F & & & & & \\ F & D & F & & & & \\ & F & D & F & & & \\ & & F & D & F & & \\ & & & F & D & F & \\ & & & & F & D & F \\ & & & & & F & D \end{array}\right)\left(\begin{array}{l} x_{1} \\ x_{2} \\ x_{3} \\ x_{4} \\ x_{5} \\ x_{6} \\ x_{7} \end{array}\right)=\left(\begin{array}{l} b_{1} \\ b_{2} \\ b_{3} \\ b_{4} \\ b_{5} \\ b_{6} \\ b_{7} \end{array}\right)\tag{1} ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛DFFDFFDFFDFFDFFDFFD⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛x1x2x3x4x5x6x7⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛b1b2b3b4b5b6b7⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞(1)
对于 i = 2 , 4 , 6 i=2,4,6 i=2,4,6, 我们分别用 F , − D , F F,-D, F F,−D,F 去乘第 i − 1 , i , i + 1 i-1, i, i+1 i−1,i,i+1 个方程, 然后将得到的方程相加:
( 2 F 2 − D 2 F 2 F 2 2 F 2 − D 2 F 2 F 2 2 F 2 − D 2 ) ( x 2 x 4 x 6 ) = ( F ( b 1 + b 3 ) − D b 2 F ( b 3 + b 5 ) − D b 4 F ( b 5 + b 7 ) − D b 6 ) \left(\begin{array}{ccc} 2 F^{2}-D^{2} & F^{2} & \\ F^{2} & 2 F^{2}-D^{2} & F^{2} \\ F^{2} & 2 F^{2}-D^{2} \end{array}\right)\left(\begin{array}{l} x_{2} \\ x_{4} \\ x_{6} \end{array}\right)=\left(\begin{array}{l} F\left(b_{1}+b_{3}\right)-D b_{2} \\ F\left(b_{3}+b_{5}\right)-D b_{4} \\ F\left(b_{5}+b_{7}\right)-D b_{6} \end{array}\right) ⎝⎛2F2−D2F2F2F22F2−D22F2−D2F2⎠⎞⎝⎛x2x4x6⎠⎞=⎝⎛F(b1+b3)−Db2F(b3+b5)−Db4F(b5+b7)−Db6⎠⎞
这样, 就将下标为奇数的
x
i
x_{i}
xi 消去.得到一个简化的分块三对角方程组, 其形式为
(
D
(
1
)
F
(
1
)
F
(
1
)
D
(
1
)
F
(
1
)
F
(
1
)
D
(
1
)
)
(
x
2
x
4
x
6
)
=
(
b
2
(
1
)
b
4
(
1
)
b
6
(
1
)
)
\left(\begin{array}{lll} D^{(1)} & F^{(1)} & \\ F^{(1)} & D^{(1)} & F^{(1)} \\ & F^{(1)} & D^{(1)} \end{array}\right)\left(\begin{array}{l} x_{2} \\ x_{4} \\ x_{6} \end{array}\right)=\left(\begin{array}{l} b_{2}^{(1)} \\ b_{4}^{(1)} \\ b_{6}^{(1)} \end{array}\right)
⎝⎛D(1)F(1)F(1)D(1)F(1)F(1)D(1)⎠⎞⎝⎛x2x4x6⎠⎞=⎝⎜⎛b2(1)b4(1)b6(1)⎠⎟⎞
其中,
D
(
1
)
=
2
F
2
−
D
2
D^{(1)}=2 F^{2}-D^{2}
D(1)=2F2−D2 与
F
(
1
)
=
F
2
F^{(1)}=F^{2}
F(1)=F2 可互换.应用如上相同的方法, 将这三个方程分别乘以
F
(
1
)
F^{(1)}
F(1),
−
D
(
1
)
-D^{(1)}
−D(1) 和
F
(
1
)
F^{(1)}
F(1), 将他们相加, 得到一个方程:
(
2
[
F
(
1
)
]
2
−
D
(
1
)
2
)
x
4
=
F
(
1
)
(
b
2
(
1
)
+
b
6
(
1
)
)
−
D
(
1
)
b
4
(
1
)
\left(2\left[F^{(1)}\right]^{2}-D^{(1)^{2}}\right) x_{4}=F^{(1)}\left(b_{2}^{(1)}+b_{6}^{(1)}\right)-D^{(1)} b_{4}^{(1)}
(2[F(1)]2−D(1)2)x4=F(1)(b2(1)+b6(1))−D(1)b4(1)
将其记作
D
(
2
)
x
4
=
b
(
2
)
D^{(2)} x_{4}=b^{(2)}
D(2)x4=b(2), 这样循环约化就完成了.现在求解这个小的方程组, 得到
x
4
x_{4}
x4 .向量
x
2
x_{2}
x2 和
x
6
x_{6}
x6 可通过求解方程组
D
(
l
)
x
2
=
b
2
(
l
)
−
F
(
l
)
x
4
D^{(\mathrm{l})} x_{2}=b_{2}^{(\mathrm{l})}-F^{(\mathrm{l})} x_{4}
D(l)x2=b2(l)−F(l)x4
D
(
l
)
x
6
=
b
6
(
l
)
−
F
(
l
)
x
4
D^{(\mathrm{l})} x_{6}=b_{6}^{(\mathrm{l})}-F^{(\mathrm{l})} x_{4}
D(l)x6=b6(l)−F(l)x4
而解得.
最后, 用 (1) 中第一、三, 五, 七个方程来分别计算 x 1 , x 3 , x 5 x_{1}, x_{3}, x_{5} x1,x3,x5 和 x 7 x_{7} x7 .
三、计算结果分析
此方法的计算结果较其他方法更精确, 而且递推的工作量在很大程度上依赖于 D p D^p Dp 和 F p F^p Fp 的稀疏性, 当这些矩阵是满的时, 计算量为 n 3 log 2 ( 2 k − 1 ) . n^3\log_2(2^k-1). n3log2(2k−1).
本人水平有限,若有不妥之处, 恳请批评指正.
作者: 图灵的猫
作者邮箱: turingscat@126.com