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 方法,可设迭代误差具有如下形式。