Crank-Nicholson隐式格式
在上一篇关于有限差分方法的教程中,我们已经了解到使用显式方法求解热方程会导致非常小的时间步长要求。为了克服这一限制,我们需要一种方法允许使用更大的时间步长,但同时需要更多的计算工作量。这就是Crank-Nicolson方案。
Crank-Nicolson方案是一种隐式方法,它将时间导数和空间导数的离散项结合起来。具体而言,它使用了时间步长中间点的平均值,从而提供了更准确和稳定的解。
上文中的显式方案:
隐式方案
Crank-Nicolson方案对这一点进行了修改,通过将第二个空间步长在时间步n和时间步n+1之间进行加权平均,从而提供了更准确和稳定的解。一个明显的问题是,在时间步n+1时,f的值是未知的,因此需要确定如何计算这些值。接下来将回答这些问题。此外,还需要考虑如何分配两个二阶导数的权重。Crank-Nicolson方案采用了五五平分的权重分配,但也可以使用其他方案。稳定性是一个关键问题,在这里要求加权因子θ满足1/2<θ<1。
一维热方程的Crank-Nicolson格式如下所示:
假设
,我们可以重新排列该方程,将已知项和未知项分别分组:
由于左侧有三个未知项,这意味着每个时间步长都需要求解一组联立线性方程。对于特定的时间步长n,需要解决I-2个方程,对应于每个内部空间网格点。由于我们使用的是狄利克雷边界条件(即固定边界),因此端点不需要在这种线性系统中求解。
线性系统可以用矩阵方程AF=D表示,其中a=-r/2,b=(1+r),c=-r/2,d为r/2乘以f的已知项,k从2到I-1:
求解线性系统
解决该系统的第一次尝试可能涉及反转矩阵A以给出列矩阵F的值为F=A^(-1)D。然而,这远不是最理想的方法,也没有考虑矩阵A的稀疏性或带状结构。在下一个教程中,我们将展示如何以有效的方式求解该矩阵,从而最大限度地减少每个时间步长所做的工作。

