克兰克-尼科尔森方法
数值分析中,克兰克-尼科尔森方法是有限差分方法中的一种,用于数值求解热方程以及形式类似的偏微分方程。它在时间方向上是隐式的二阶方法,数值稳定。该方法诞生于20世纪,由John Crank与Phyllis Nicolson发展。
对于扩散方程(包括许多其他方程),可以证明克兰克-尼科尔森方法无条件稳定。但是,如果时间步长与空间步长平方的比值过大(一般地,大于1/2),近似解中将存在虚假的振荡或衰减。基于这个原因,当要求大时间步或高空间分辨率的时候,往往会采用数值精确较差的后向欧拉方法进行计算,这样即可以保证稳定,又避免了解的伪振荡。
目录 |
方法[编辑]
克兰克-尼科尔森方法在空间域上的使用中心差分;而时间域上应用梯形公式,保证了时间域上的二阶收敛。例如,一维偏微分方程
令
,则通过克兰克-尼科尔森方法导出的差分方程是第n步上采用前向欧拉方法与第n+1步上采用后向欧拉方法的平均值(注意,克兰克-尼科尔森方法本身不是这两种方法简单地取平均,方程对解隐式依赖)。
(前向欧拉方法)
(后向欧拉方法)
(克兰克-尼科尔森方法)
对于F,通过中心差分方法使其在空间上是离散的。
注意,这是一个隐式方法,需要求解代数方程组以得到时间域上的下一个u值。如果偏微分方程是非线性的,中心差分后得到的方程依旧是非线性方程系统,因此在时间步上推进会涉及求解非线性代数方程组。许多问题中,特别是线性扩散,代数方程中的矩阵是三对角的,通过三对角矩阵算法可以高效求解,这样,算法的时间复杂度由直接求解全矩阵的
转化为
。
示例[编辑]
线性扩散问题[编辑]
- 线性扩散方程
通过克兰克-尼科尔森方法将得到离散方程
引入变量
:
这是一个三对角问题,应用三对角矩阵算法(追赶法)即可得到
,而不需要对矩阵直接求逆。
- 准线性扩散方程
离散化后则会得到非线性方程系统。但是某些情况下,通过使用a的旧值,即用
替代
,可将问题线性化。其他时候,也可能在保证稳定性的基础上使用显式方法估计
一维多通道连接的扩散问题[编辑]
这种模型可以用于描述水流中含稳定污染流,但只有一维信息的情况。它可以简化为一维问题并得到有价值的信息。 我们对水中污染溶质富集的问题进行建模,这种问题由三部分组成:已知的扩散方程(
为常量),平流分量(即由速度场导致的系统在空间上的变化,表示为常量Ux),以及与纵向通道k旁流的相互作用。
其中C表示污染物的富集水平,下标N和M分别对应上一通道和下一通道。
克兰克-尼科尔森方法(i对应位置,j对应时间)将以上偏微分方程中的每个部分变换为
现在引入以下常量用于简化计算:
把 <1>, <2>, <3>, <4>, <5>, <6>, α, β 和 λ 代入 <0>. 把新时间项(j+1)代入到左边,当前时间项(j)代入到右边,将得到
第一个通道只能与下一个通道(M)有关系,因此表达式可以简化为:
同样地, 最后一个通道只与前一个通道(N)有关联,因此表达式可以简化为
为求解此线性方程组,我们需要知道边界条件在通道始端就已经给定了。
: 当前时间步某通道的初始条件
: 下一时间步某通道的初始条件
: 前一通道到当前时间步下某通道的初始条件
: 下一通道到当前时间步下某通道的初始条件
对于通道的末端最后一个节点,最方便的条件是是绝热近似,则
当且只当
时,这一条件才被满足。
以3个通道,5个节点为例,可以将线性系统问题表示为
其中,
需要清楚的是,AA和BB是由四个不同子矩阵组成的矩阵,
其中上述矩阵的的矩阵元对应于下一个矩阵和额外的4x4零矩阵。请注意,矩阵AA和BB的大小为12x12
&
这里的d矢量用于保证边界条件成立。在此示例中为12x1的矢量。
为了找到任意时间下污染物的聚集情况,我们需要对以下方程进行迭代计算:
示例2: 扩散方程
|
|||||||||||||||||

(前向欧拉方法)
(后向欧拉方法)
(克兰克-尼科尔森方法)


















![\begin{bmatrix}AA\end{bmatrix}\begin{bmatrix}C^{j+1}\end{bmatrix}=[BB][C^{j}]+[d]](http://upload.wikimedia.org/math/0/c/3/0c33d6714679e2ac59da34af149d6dc2.png)






& 

![\begin{bmatrix}C^{j+1}\end{bmatrix}=\begin{bmatrix}AA^{-1}\end{bmatrix}([BB][C^{j}]+[d])](http://upload.wikimedia.org/math/d/d/e/dde73a070bc7c354b98c0643f949bdb8.png)