首先再回顾一下之前的高斯迭代,就拿T22举例,由于计算是按着从左向右,从下向上的方向 进行的,所以计算T22的时候,就可以拿刚刚计算出来的T12和T21来计算T22,如果说最后结果是收敛的,那么计算出来的T22会更接近于最终值。
对比常规的Jacobi的思想,可以发现高斯迭代的方法有这么一个特点:“在同一个迭代步内,边界条件向计算域传播的更快。”也正是这一个特点造成了高斯迭代的收敛快于Jacobi迭代。
通过公式了解一下这句话,首先是Jacobi迭代:
这是Guass迭代:
首先讨论Jacobi迭代下:在同一个时间步长内,不同的迭代次数下,受影响的位置是“一圈一圈”向内传播的。
可以把这种影响想象成波!内部节点因为有初始条件的制约,开始不受到外部边界的影响,这种影响是从边界向内部传播的。
在分析Guass-Seidel迭代:
同时也只考虑一个时间步长,在一次迭代过程中计算场每一个点的温度计算都受到了控制体左侧和下侧控制体的影响,也就是说在一个迭代步内,左侧和下侧的影响就传遍了整个计算域;但是上面和右面的控制体在计算域中第一次迭代的影响却还是一步一步。
第一次迭代影响方向用粉色表示:第二次影响方向用蓝色表示;
第一迭代:
第二次迭代:
这个时候,我们再来考虑一下这句话:“在同一个迭代步内,边界条件向计算域传播的更快。”这也就从边界影响传播速度的角度解释了为什么Guass迭代要快于Jacobi迭代。
1.线迭代
参考之前的(1)-(2)式,给出线迭代的公式:
从公式上开看,这和Guass迭代差不多,影响都是从两边一次迭代就传遍了整个计算域,剩下两边只能一格一格的传递影响。即:左侧和右侧均使用新迭代步的值,上下侧使用上一个迭代步的值。
因为每一行上是使用了新迭代步的值,所以在每一行就可以表示成三对角矩阵,有了三对角矩阵就意味着可以用TDMA算法,所以这个计算方法又是一个新的方法:ADI算法。
照猫画虎,这是左右的影响一迭代步传遍全场,当然一步上下全场也是可以的!
2.ADI迭代
这里,在对(3)做进一步修改:
这样就得到了“隐式线迭代”。
想想也知道,(4)隐式线迭代可以做到一个迭代步内x轴双方向全场,y方向单方向全场,所以这个隐式线迭代也叫做“x方向隐式线迭代”。这就有意思了,高斯因为有两个面是一迭代步影响遍布全场,就比Jacobi迭代快,那么隐格式线迭代有三个面的影响单步遍全场,它的迭代绝对是快于高斯迭代的!
既然有“x方向隐式线迭代”,那就必定有“y方向隐式线迭代”,它的表达式,可以写成:
(5)隐式线迭代可以做到一个迭代步内y轴双方向全场,x方向单方向全场。
现在观察(4)-(5)式子,可以发现不管是x方向隐式线迭代还是y方向隐式线迭代,
三面影响单步遍全场,总有那么一个方向的影响是一步一步传递的。譬如:x方向隐式线迭代,上侧的影响就是一步一步传递的;y方向隐式线迭代,右侧的影响就是一步一步传递的。
现在这么想,如果我们在一个迭代步中,先进行一次x方向隐式线迭代(此时上侧的影响还是一步一步),紧接着进行一次y方向隐式线迭代(这样就保证了上方向也可以单次迭代影响遍全场)。把这种操作就叫做交替方向隐式线迭代,ADI迭代。
这个ADI迭代,对于一个未知的问题,也许利用x方向隐式线迭代需要10次,利用y方向隐式线迭代需要20次,此时,ADI迭代综合了这两种迭代,需要n次就可以达到收敛效果,这里n介于10和20。所以,ADI迭代不能减少计算量,但是对于未知问题,它可以很好的平衡x方向隐式线迭代和y方向隐式线迭代的计算量,所以通用性较强。