2-迭代与时间相关法

  • 格式:docx
  • 大小:161.01 KB
  • 文档页数:9

§3. 定常问题的迭代解法
1)在实际的计算中,网格点的数量非常多,需要求解大型的代数方程组。

为此,可直接调用编程语言(C/C++、FORTRAN 、Matlab 等)的数学函数库来求解,也可使用下面讨论的迭代解法。

Laplace 方程 22
2
20x
y
y
y
抖+=抖 的差分近似为 1,,1,,1,,1
2
2
220j k j k j k
j k j k j k x
y
+-+--+-++
=D D y y y y y y
将它改写成
1,1,,1,1,222222j k j k j k j k j k x y x y +-+-骣++÷ç÷+=+ç÷÷çD D D D 桫
y y y y y 或
,1,1,,1,1j k j k j k j k j k a a b b +-+-=+++y y y y y
其中
(
)
2
222
2
2
1
222y x a x y
x y D D =
=
D +D +D D
(
)
2
222
22
1
222x y b x y
x y D D ==
D +D +
D D
当 x y D =D 时,1
4
a b == 。

给定迭代的初始近似 (0)
,j k y ,最简单的迭代公式为
(1)()()()(),1,1,,1,1
m m m m m j k j k j k j k j k a a b b ++-+-=+++y y y y y ( 0,1,2,3,m =L ) 称为简单迭代法。

2)对于前面给出的实例,简单迭代法的计算步骤为 1. 给定迭代的初始近似 (0),j k y 和迭代的收敛精度 δ 。

2. 对 0,1,2,3,m =L :
3. 在流场内的每一个网格点(内点)上用迭代公式
(1)()()()()
,1,1,,1,1
m m m m m j k j k j k j k j k a a b b ++-+-=+++y y y y y 进行计算。

公式右边如果有网格点位于边界 OABC 、OE 、ED 上,可直接将边界条件指定的流函数值代入。

4. 在边界 CD 上的每一个网格点(不包括端点C 、D )处,
用公式 (1)(1)
,1,m m j k j k
++-=y y 计算。

5. 对所有网格点,计算 (1)()
,,,max m m j k j k
j k
+-y y 。

若 (1)()
,,,max m m j k j k
j k
δ+-<y y ,迭代收敛。

否则将 m 加 1 ,返回步骤3。

3)如果迭代计算的过程中对网格点是按行扫描的,则当计算到
网格点(,j k )时,上一个网格点(1,j k -)处的流函数值已经从 ()
1,m j k -y 更新为 (1)
1,m j k +-y ;而网格点(,1j k -)位于上一行,其流函数值也已经从 (),1m j k -y 更新为 (1)
,1m j k +-y 。

迭代算法可以充分利用这些最新得到
的结果,这样就构成了高斯-赛德尔迭代法
(1)()(1)()(1),1,1,,1,1
m m m m m j k j k j k j k j k a a b b ++++-+-=+++y y y y y
如果迭代计算的过程中对网格点的扫描是按其他顺序进行的,则上式右边会有所不同。

但高斯-赛德尔迭代法的基本思路总是不变的,即:充分利用已经得到的最新结果。

采用高斯-赛德尔迭代法,通常能够加快迭代的收敛,但并不总是如此。

甚至可以找到反例,对某种特定的代数方程组,用简单迭代法收敛,用高斯-赛德尔迭代法反而不收敛。

4)还可以采用其他迭代方案。

例如,将高斯-赛德尔迭代的计算结果记作 (),j k *y ,即
()()()()()
,1,1,,1,1
m m j k j k j k j k j k a a b b ***+-+-=+++y y y y y 将它与 ()
,m j k
y 的加权平均作为迭代的结果 ()(1)()()
,1,,1m m j k j k j k
ωω+*+=+-y y y 称为松弛法,式中的 02ω<< ,称为松弛因子。

显然,当 ω=1 时,松弛法还原成高斯-赛德尔迭代法。

而当
1<ω<2 时称为超松弛迭代,当 0<ω<1 时称为亚松弛迭代。

§4.迭代的收敛性分析(不做要求)
1)设 ,j k y 为差分方程的精确解(注意,不是原微分方程定解问题的精确解,这与舍入误差的稳定性分析类似),()
,m j k y 是其第 m 次迭代近似。

迭代误差可定义为
()()
,,,m m j k j k
j k δ=-y y 类似于稳定性分析的von Neumann 方法,可设迭代误差具有如下形式。