特征值与收敛性
很多迭代解法的收敛性与矩阵的特征值分布有关。比如静态迭代法
假设精确解为
如果初始误差在
注意这里比较特征值的大小都比较的是绝对值。
再考虑与
几何多重网格(Geometric multigrid, GMG)
对空间的偶数阶偏微分算符的特征函数是正弦函数,且高频正弦函数的特征值更大
带偶数阶空间偏微分的方程如波动方程、热传导方程、拉普拉斯方程等的通解在空间上都有类似正弦函数的分布规律。将这类方程离散化,所导出的线性方程组的系数矩阵的特征向量也往往具有类似正弦函数的分布规律,而且高频特征向量的特征值更大。如一维情况的二阶导(
以一维情况的二阶导为例,以
选取
不过,如果能选取一个低频分量较小的初值,那么迭代步数将减少。我们注意到低频和高频是相对的。如果一个函数原离散域的频率为
如果能用
将微分方程重新离散化这一过程称为网格粗化(coarsening)。
原始网格下已有迭代结果
相当于在粗化的网格下求解
其中
这里是取三点加权平均的方式,若要直接丢弃一半的数据,可以令
解出低频误差被抑制的
插值相当于左乘矩阵
将残差抽样到粗网格,求解后将解插值到细网格,即
对比可得
当然,即使所得的
网格还可以多层粗化,成为一个递归过程,即
多重网格算法求解
- 如果网格规模足够小,精确或不精确地求解方程,返回解;
- 否则,用迭代法以
为初值迭代数步,得到,并计算残差;
- 将残差粗化
;
- 令
,使用多重网格算法求解;
- 将解插值并累加
;
- 以
为初值迭代数步,得到,返回。
其中,以
还是这个一维的例子,选取
选取
在一维的例子中,二倍粗化的网格计算开销只有原来的二分之一,而四倍、八倍的粗网格计算开销更小。所以每步迭代的计算量是最细网格层计算量的最多两倍。不过在迭代前需要预先计算矩阵乘
一维场景只是用来做例子,其实一维情况的多对角方程是很容易直接用LU分解法求解的。对于高维问题,如果问题本身是各向同性的,那么可以多个方向同时粗化,比如在三维空间下可以在每层粗化中每个维度缩小二分之一,总网格点数缩小到八分之一;如果问题本身有各向异性特点,根据每个方向的数值特点,可以选择其中一些方向进行更大幅度粗化,另一些方向进行小幅度粗化或者不粗化。
这里的
代数多重网格(Algebraic multigrid,AMG)
仍然以微分方程为背景,对于不规则区域,或者区域内各部分的分辨率要求不一致的情况下,可能需要用非结构化网格。下图所示的例子中,每个三角形顶点代表一个变量,每条边代表两个变量之间的关系,也就是系数矩阵的一个非零元。当然,在这种情况下,因为顶点变量只能计算一阶导(即两点值之差除以位移),处理高阶导需要引入额外的边变量,所以通常不会再用上一节提到的简单的有限差分法,而用有限元法或者有限体积法求解,通过对方程积分,来尽量避免高阶导项的直接出现。
如图的非结构化网格与结构化网格的不同之处在于,每个网格点与哪些网格点相邻是不固定的。从矩阵上来说,矩阵每行的非零元位置是不固定的。
这种情况下我们仍然希望利用粗化网格来抑制低频误差。但是问题在于,如何选取粗网格,也就是如何构造抽样矩阵和插值矩阵呢?这种情况下,如果知道每个点的坐标(比如
我们注意到,虽然不再是有限差分法,但是微分项同样是相邻点的变量之差分来代替的,所以和结构化情况一样的是,离得近的两个点
粗化
如果
就可以认为变量
该强依赖关系可以用图表示,对于接近对称的系数矩阵,该图很可能是无向图。于是问题变成:从图
比如较强的条件
或者稍弱的条件
要注意,满足条件的
在很多粗网格点选取算法中都用了最大度优先策略,计算每个变量被多少个变量所强依赖,优先选取值较大的,选取之后更新图,当然并行算法通常不会每次只选一个。满足
插值
插值公式可以选择简单的插值
其中
或者对满足
其中
由偶数阶偏微分所导出的方程,往往有对低频输入不敏感的特点,其中以椭圆型方程(泊松方程)为典型,在均匀介质中;抛物型方程(热传导方程)和双曲型方程(波动方程)总体上也有这个特点,不过由于加上了时间项,频谱与椭圆形方程有略微的差异,但仍然对误差有一定程度的低通特性。
上面所介绍的迭代模式是从最细网格开始不断粗化、前平滑、粗化……到最粗网格,然后不断插值、后平滑、插值……回到最细网格。这样的一个循环称为V-循环(V-Cycle)。多重网格的迭代模式还有W-循环,完全多重网格(full multigrid, FMG, 也叫F-循环)等。W-循环和F-循环的特点是更多地停留在粗网格层,使得低频误差被消除得更彻底,同时粗网格的计算开销也更小。
多重网格可以作为单独的求解方法,反复进行V-循环(或W-循环、F-循环)来求解方程,也可以将一个V-循环作为克雷洛夫子空间法的预调节器。前面的小实验可以看到,即使是用了多重网格,如果最粗网格上还是高斯-赛德尔迭代,误差零频率分量也没能有效消除。所以,作为单独的求解方法时,最粗网格的求解最好是精确求解;在网格足够小时,可以用LU分解法直接求解。作为预调节器时,最粗网格的求解可以是不精确的。
在求解椭圆型方程时,多重网格是目前常用的收敛性最好的预调节器之一,不过对于椭圆形方程以外的情况无法保证。