用分块循环约化法求 Ax=b

用分块循环约化法求 Ax=b

文章目录

  • 用分块循环约化法求 Ax=b
    • 一、实验目的、内容
    • 二、相关背景知识介绍
    • 三、计算结果分析

一、实验目的、内容

  1. 掌握数值方法

  2. 掌握循环约化法的基本思想, 用分块循环约化法解方程组 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=DIqIqDIqIqD
是一个 2 k − 1 2^{k}-1 2k1 阶的分块方阵.

二、相关背景知识介绍

  1. 循环约化法的基本思想: 将问题的维数反复的减半, 直到得到一个关于末知子向量 x 2 k − 1 x_{2^{k-1}} x2k1 q × q q \times q q×q 方程组.这个方程组通过标准方法解出.前面消去的 x i x_{i} xi 再通过向后回代法解出.
  2. 举例说明: 以 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} DFFDFFDFFDFFDFFDFFDx1x2x3x4x5x6x7=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 i1,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) 2F2D2F2F2F22F2D22F2D2F2x2x4x6=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)=2F2D2 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)]2D(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(2k1).


本人水平有限,若有不妥之处, 恳请批评指正.
作者: 图灵的猫

作者邮箱: [email protected]

你可能感兴趣的:(数值算法,笔记,并行算法,循环约化)