**克兰克－尼科尔森方法**（英語：）是一種数值分析的有限差分法，可用于数值求解热方程以及类似形式的偏微分方程。它在时间方向上是隐式的二阶方法，可以寫成隐式的龍格－庫塔法，数值稳定。该方法诞生于20世纪，由約翰·克蘭克与菲利斯·尼科爾森发展。

可以证明克兰克－尼科尔森方法对于扩散方程（以及许多其他方程）是无条件稳定。但是，如果时间步长Δt乘以熱擴散率，再除以空间步长平方Δx2的值过大（根據馮諾依曼穩定性分析，以大于1/2為準），近似解中将存在虚假的振荡或衰减。基于这个原因，当要求大时间步或高空间分辨率的时候，往往会采用数值精确较差的后向欧拉法（英语：）进行计算，这样即可以保证稳定，又避免了解的伪振荡。

方法
--

克兰克－尼科尔森方法在空间域上的使用中心差分；而时间域上应用梯形公式，保证了时间域上的二阶收敛。例如，一维偏微分方程

{\displaystyle {\frac {\partial u}{\partial t}}=F\left(u,x,t,{\frac {\partial u}{\partial x}},{\frac {\partial ^{2}u}{\partial x^{2}}}\right)}
令{\displaystyle u(i\Delta x,n\Delta t)=u\_{i}^{n}\,}，则通过克兰克－尼科尔森方法导出的差分方程是第*n*步上采用前向欧拉方法与第*n+1*步上采用后向欧拉方法的平均值（注意，克兰克－尼科尔森方法本身不是这两种方法简单地取平均，方程对解隐式依赖）。

{\displaystyle {\frac {u\_{i}^{n+1}-u\_{i}^{n}}{\Delta t}}=F\_{i}^{n}\left(u,x,t,{\frac {\partial u}{\partial x}},{\frac {\partial ^{2}u}{\partial x^{2}}}\right)} (前向欧拉方法)
{\displaystyle {\frac {u\_{i}^{n+1}-u\_{i}^{n}}{\Delta t}}=F\_{i}^{n+1}\left(u,x,t,{\frac {\partial u}{\partial x}},{\frac {\partial ^{2}u}{\partial x^{2}}}\right)} (后向欧拉方法)
{\displaystyle {\frac {u\_{i}^{n+1}-u\_{i}^{n}}{\Delta t}}={\frac {1}{2}}\left(F\_{i}^{n+1}\left(u,x,t,{\frac {\partial u}{\partial x}},{\frac {\partial ^{2}u}{\partial x^{2}}}\right)+F\_{i}^{n}\left(u,x,t,{\frac {\partial u}{\partial x}},{\frac {\partial ^{2}u}{\partial x^{2}}}\right)\right)} (克兰克－尼科尔森方法)
对于*F*，通过中心差分方法使其在空间上是离散的。

注意，这是一个隐式方法，需要求解代数方程组以得到时间域上的下一个*u*值。如果偏微分方程是非线性的，中心差分后得到的方程依旧是非线性方程系统，因此在时间步上推进会涉及求解非线性代数方程组。许多问题中，特别是线性扩散，代数方程中的矩阵是三对角的，通过三对角矩阵算法可以高效求解，这样，算法的时间复杂度由直接求解全矩阵的{\displaystyle {\mathcal {O}}(n^{3})}转化为\mathcal{O}(n)。

示例
--

### 线性扩散问题

* 线性扩散方程

{\displaystyle {\frac {\partial u}{\partial t}}=a{\frac {\partial ^{2}u}{\partial x^{2}}}}
通过克兰克－尼科尔森方法将得到离散方程

{\displaystyle {\frac {u\_{i}^{n+1}-u\_{i}^{n}}{\Delta t}}={\frac {a}{2(\Delta x)^{2}}}\left((u\_{i+1}^{n+1}-2u\_{i}^{n+1}+u\_{i-1}^{n+1})+(u\_{i+1}^{n}-2u\_{i}^{n}+u\_{i-1}^{n})\right)}
引入变量{\displaystyle r={\frac {a\Delta t}{2(\Delta x)^{2}}}}:

{\displaystyle -ru\_{i+1}^{n+1}+(1+2r)u\_{i}^{n+1}-ru\_{i-1}^{n+1}=ru\_{i+1}^{n}+(1-2r)u\_{i}^{n}+ru\_{i-1}^{n}\,}
这是一个三对角问题，应用三对角矩阵算法（追赶法）即可得到{\displaystyle u\_{i}^{n+1}}，而不需要对矩阵直接求逆。

* 准线性扩散方程

{\displaystyle {\frac {\partial u}{\partial t}}=a(u){\frac {\partial ^{2}u}{\partial x^{2}}}}
离散化后则会得到非线性方程系统。但是某些情况下，通过使用*a*的旧值，即用{\displaystyle a\_{i}^{n}(u)\,} 替代{\displaystyle a\_{i}^{n+1}(u)\,}，可将问题线性化。其他时候，也可能在保证稳定性的基础上使用显式方法估计{\displaystyle a\_{i}^{n+1}(u)\,}

### 一维多通道连接的扩散问题

这种模型可以用于描述水流中含稳定污染流，但只有一维信息的情况。它可以简化为一维问题并得到有价值的信息。
可对水中污染溶质富集的问题进行建模，这种问题由三部分组成：已知的扩散方程（D\_{x}为常量），平流分量（即由速度场导致的系统在空间上的变化，表示为常量*Ux*），以及与纵向通道k旁流的相互作用。

{\displaystyle \langle 0\rangle {\frac {\partial C}{\partial t}}=D\_{x}{\frac {\partial ^{2}C}{\partial x^{2}}}-U\_{x}{\frac {\partial C}{\partial x}}-k(C-C\_{N})-k(C-C\_{M})}
其中*C*表示污染物的富集水平，下标*N*和*M*分别对应上一通道和下一通道。

克兰克－尼科尔森方法（i对应位置，j对应时间）将以上偏微分方程中的每个部分变换为

{\displaystyle \langle 1\rangle {\frac {\partial C}{\partial t}}={\frac {C\_{i}^{j+1}-C\_{i}^{j}}{\Delta t}}}
{\displaystyle \langle 2\rangle {\frac {\partial ^{2}C}{\partial x^{2}}}={\frac {1}{2(\Delta x)^{2}}}\left((C\_{i+1}^{j+1}-2C\_{i}^{j+1}+C\_{i-1}^{j+1})+(C\_{i+1}^{j}-2C\_{i}^{j}+C\_{i-1}^{j})\right)}
{\displaystyle \langle 3\rangle {\frac {\partial C}{\partial x}}={\frac {1}{2}}\left({\frac {(C\_{i+1}^{j+1}-C\_{i-1}^{j+1})}{2(\Delta x)}}+{\frac {(C\_{i+1}^{j}-C\_{i-1}^{j})}{2(\Delta x)}}\right)}
{\displaystyle \langle 4\rangle C={\frac {1}{2}}(C\_{i}^{j+1}+C\_{i}^{j})}
{\displaystyle \langle 5\rangle C\_{N}={\frac {1}{2}}(C\_{Ni}^{j+1}+C\_{Ni}^{j})}
{\displaystyle \langle 6\rangle C\_{M}={\frac {1}{2}}(C\_{Mi}^{j+1}+C\_{Mi}^{j})}
现在引入以下常量用于简化计算：

{\displaystyle \lambda ={\frac {D\_{x}\Delta t}{2\Delta x^{2}}}}
{\displaystyle \alpha ={\frac {U\_{x}\Delta t}{4\Delta x}}}
{\displaystyle \beta ={\frac {k\Delta t}{2}}}
把 <1>, <2>, <3>, <4>, <5>, <6>, *α*, *β* 和 *λ* 代入 <0>. 把新时间项(*j*+1)代入到左边，当前时间项(*j*)代入到右边，将得到

{\displaystyle -\beta C\_{Ni}^{j+1}-(\lambda +\alpha )C\_{i-1}^{j+1}+(1+2\lambda +2\beta )C\_{i}^{j+1}-(\lambda -\alpha )C\_{i+1}^{j+1}-\beta C\_{Mi}^{j+1}=\beta C\_{Ni}^{j}+(\lambda +\alpha )C\_{i-1}^{j}+(1-2\lambda -2\beta )C\_{i}^{j}+(\lambda -\alpha )C\_{i+1}^{j}+\beta C\_{Mi}^{j}}
第一个通道只能与下一个通道(*M*)有关系，因此表达式可以简化为：

{\displaystyle -(\lambda +\alpha )C\_{i-1}^{j+1}+(1+2\lambda +\beta )C\_{i}^{j+1}-(\lambda -\alpha )C\_{i+1}^{j+1}-\beta C\_{Mi}^{j+1}=+(\lambda +\alpha )C\_{i-1}^{j}+(1-2\lambda -\beta )C\_{i}^{j}+(\lambda -\alpha )C\_{i+1}^{j}+\beta C\_{Mi}^{j}}
同样地， 最后一个通道只与前一个通道（*N*）有关联，因此表达式可以简化为

{\displaystyle -\beta C\_{Ni}^{j+1}-(\lambda +\alpha )C\_{i-1}^{j+1}+(1+2\lambda +\beta )C\_{i}^{j+1}-(\lambda -\alpha )C\_{i+1}^{j+1}=\beta C\_{Ni}^{j}+(\lambda +\alpha )C\_{i-1}^{j}+(1-2\lambda -\beta )C\_{i}^{j}+(\lambda -\alpha )C\_{i+1}^{j}}
为求解此线性方程组，需要知道边界条件在通道始端就已经给定了。

{\displaystyle C\_{0}^{j}}: 当前时间步某通道的初始条件 

{\displaystyle C\_{0}^{j+1}}: 下一时间步某通道的初始条件

{\displaystyle C\_{N0}^{j}}: 前一通道到当前时间步下某通道的初始条件

{\displaystyle C\_{M0}^{j}}: 下一通道到当前时间步下某通道的初始条件

对于通道的末端最后一个节点，最方便的条件是是绝热近似，则

{\displaystyle {\frac {\partial C}{\partial x}}\_{x=z}={\frac {(C\_{i+1}-C\_{i-1})}{2\Delta x}}=0}
当且只当

{\displaystyle C\_{i+1}^{j+1}=C\_{i-1}^{j+1}\,}
时，这一条件才被满足。

以3个通道，5个节点为例，可以将线性系统问题表示为

{\displaystyle {\begin{bmatrix}AA\end{bmatrix}}{\begin{bmatrix}C^{j+1}\end{bmatrix}}=[BB][C^{j}]+[d]}
其中，

{\displaystyle \mathbf {C^{j+1}} ={\begin{bmatrix}C\_{11}^{j+1}\\C\_{12}^{j+1}\\C\_{13}^{j+1}\\C\_{14}^{j+1}\\C\_{21}^{j+1}\\C\_{22}^{j+1}\\C\_{23}^{j+1}\\C\_{24}^{j+1}\\C\_{31}^{j+1}\\C\_{32}^{j+1}\\C\_{33}^{j+1}\\C\_{34}^{j+1}\end{bmatrix}}} {\displaystyle \mathbf {C^{j}} ={\begin{bmatrix}C\_{11}^{j}\\C\_{12}^{j}\\C\_{13}^{j}\\C\_{14}^{j}\\C\_{21}^{j}\\C\_{22}^{j}\\C\_{23}^{j}\\C\_{24}^{j}\\C\_{31}^{j}\\C\_{32}^{j}\\C\_{33}^{j}\\C\_{34}^{j}\end{bmatrix}}}
需要清楚的是，*AA*和*BB*是由四个不同子矩阵组成的矩阵，

{\displaystyle \mathbf {AA} ={\begin{bmatrix}AA1&AA3&0\\AA3&AA2&AA3\\0&AA3&AA1\end{bmatrix}}}
{\displaystyle \mathbf {BB} ={\begin{bmatrix}BB1&-AA3&0\\-AA3&BB2&-AA3\\0&-AA3&BB1\end{bmatrix}}}
其中上述矩阵的的矩阵元对应于下一个矩阵和额外的4x4零矩阵。请注意，矩阵*AA*和*BB*的大小为12x12

{\displaystyle \mathbf {AA1} ={\begin{bmatrix}(1+2\lambda +\beta )&-(\lambda -\alpha )&0&0\\-(\lambda +\alpha )&(1+2\lambda +\beta )&-(\lambda -\alpha )&0\\0&-(\lambda +\alpha )&(1+2\lambda +\beta )&-(\lambda -\alpha )\\0&0&-2\lambda &(1+2\lambda +\beta )\end{bmatrix}}}
{\displaystyle \mathbf {AA2} ={\begin{bmatrix}(1+2\lambda +2\beta )&-(\lambda -\alpha )&0&0\\-(\lambda +\alpha )&(1+2\lambda +2\beta )&-(\lambda -\alpha )&0\\0&-(\lambda +\alpha )&(1+2\lambda +2\beta )&-(\lambda -\alpha )\\0&0&-2\lambda &(1+2\lambda +2\beta )\end{bmatrix}}}
{\displaystyle \mathbf {AA3} ={\begin{bmatrix}-\beta &0&0&0\\0&-\beta &0&0\\0&0&-\beta &0\\0&0&0&-\beta \end{bmatrix}}}
{\displaystyle \mathbf {BB1} ={\begin{bmatrix}(1-2\lambda -\beta )&(\lambda -\alpha )&0&0\\(\lambda +\alpha )&(1-2\lambda -\beta )&(\lambda -\alpha )&0\\0&(\lambda +\alpha )&(1-2\lambda -\beta )&(\lambda -\alpha )\\0&0&2\lambda &(1-2\lambda -\beta )\end{bmatrix}}}   &  
{\displaystyle \mathbf {BB2} ={\begin{bmatrix}(1-2\lambda -2\beta )&(\lambda -\alpha )&0&0\\(\lambda +\alpha )&(1-2\lambda -2\beta )&(\lambda -\alpha )&0\\0&(\lambda +\alpha )&(1-2\lambda -2\beta )&(\lambda -\alpha )\\0&0&2\lambda &(1-2\lambda -2\beta )\end{bmatrix}}}
这里的*d*矢量用于保证边界条件成立。在此示例中为12x1的矢量。

{\displaystyle \mathbf {d} ={\begin{bmatrix}(\lambda +\alpha )(C\_{10}^{j+1}+C\_{10}^{j})\\0\\0\\0\\(\lambda +\alpha )(C\_{20}^{j+1}+C\_{20}^{j})\\0\\0\\0\\(\lambda +\alpha )(C\_{30}^{j+1}+C\_{30}^{j})\\0\\0\\0\end{bmatrix}}}
为了找到任意时间下污染物的聚集情况，需要对以下方程进行迭代计算：

{\displaystyle {\begin{bmatrix}C^{j+1}\end{bmatrix}}={\begin{bmatrix}AA^{-1}\end{bmatrix}}([BB][C^{j}]+[d])}
### 二维扩散问题

將擴散問題延伸到二維的笛卡爾網格（英语：），推導方程類似，但結果會是{{link-en|带形矩阵|Banded matrix||的方程式，不是三角矩陣，二維的熱方程

{\displaystyle {\frac {\partial u}{\partial t}}=a\left({\frac {\partial ^{2}u}{\partial x^{2}}}+{\frac {\partial ^{2}u}{\partial y^{2}}}\right)}
假設網格滿足{\displaystyle \Delta x=\Delta y}的特性，即可通過克蘭克－尼科爾森方法將得到離散方程

{\displaystyle {\begin{aligned}u\_{i,j}^{n+1}&=u\_{i,j}^{n}+{\frac {1}{2}}{\frac {a\Delta t}{(\Delta x)^{2}}}{\big [}(u\_{i+1,j}^{n+1}+u\_{i-1,j}^{n+1}+u\_{i,j+1}^{n+1}+u\_{i,j-1}^{n+1}-4u\_{i,j}^{n+1})\\&\qquad {}+(u\_{i+1,j}^{n}+u\_{i-1,j}^{n}+u\_{i,j+1}^{n}+u\_{i,j-1}^{n}-4u\_{i,j}^{n}){\big ]}\end{aligned}}}
此方程可以再重組，配合柯朗数（英语：）再進行簡化

{\displaystyle \mu ={\frac {a\Delta t}{(\Delta x)^{2}}}.}
在克蘭克－尼科爾森方法下，不需要為了穩定性而限制柯朗数的上限，不過為了數值穩定度，柯朗数仍不能太高，可以將方程式重寫如下：

{\displaystyle {\begin{aligned}&(1+2\mu )u\_{i,j}^{n+1}-{\frac {\mu }{2}}\left(u\_{i+1,j}^{n+1}+u\_{i-1,j}^{n+1}+u\_{i,j+1}^{n+1}+u\_{i,j-1}^{n+1}\right)\\&\quad =(1-2\mu )u\_{i,j}^{n}+{\frac {\mu }{2}}\left(u\_{i+1,j}^{n}+u\_{i-1,j}^{n}+u\_{i,j+1}^{n}+u\_{i,j-1}^{n}\right).\end{aligned}}}

應用在金融數學上
--------

許多的現象都可以用熱方程（金融數學上稱為擴散方程）來建模，因此克兰克－尼科尔森方法也可以用在這些領域中。尤其金融衍生工具定價用的布萊克-休斯模型可以轉換為熱方程，因此期權定價的數值解可以用克兰克－尼科尔森方法求得。

因為期權定價若超過基本假設（例如改變股息）時，無法求得解析解，需要用上述方式求得。不過若是非平滑的最後條件（大部份的金融商品都是如此），克兰克－尼科尔森方法會有數值的震盪，無法用濾波方式平緩。在期權定價上會反映在履約價Γ的變動。因此，一開始幾個步驟需要用其他比較不會震盪的方法（如全隱式有限差分法）。

相關條目
----

* 金融數學
* 梯形法 (微分方程)（英语：）

參考資料
----

1. ↑  Tuncer Cebeci.. Springer. 2002. ISBN 0-9668461-4-1.
2. ↑  Crank, J.; Nicolson, P.. Proc. Camb. Phil. Soc. 1947, **43** (1): 50–67. doi:10.1007/BF02127704.
3. ↑  Thomas, J. W.. Texts in Applied Mathematics **22**. Berlin, New York: Springer-Verlag. 1995. ISBN 978-0-387-97999-1. . Example 3.3.2 shows that Crank–Nicolson is unconditionally stable when applied to {\displaystyle u\_{t}=au\_{xx}}.
4. ↑  Wilmott, P.; Howison, S.; Dewynne, J.. Cambridge Univ. Press. 1995  [2015-02-16]. ISBN 0-521-49789-2. （原始内容存档于2012-10-19）.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
数值偏微分方程 |
| --- |
|  |
| 有限差分法 | 

|  |  |
| --- | --- |
| 热传导方程及其相关 | FTCS 格式 · 克兰克-尼科尔森方法 |
|  |
| 双曲方程 | Lax–Friedrichs 方法 · Lax–Wendroff 方法 · MacCormack 方法 · 迎风格式 · 特征线法 |
|  |
| 其他方法 | 交替方向隐式法（ADI） · 时域有限差分（FDTD） |

 |
|  |
| 有限体积法 | 戈杜诺夫格式 · High-resolution scheme · MUSCL 格式 · AUSM · Riemann solver |
|  |
| 有限元法 | hp-FEM · 扩展有限元法 · 不连续伽辽金法(Galerkin) · Spectral element method · Meshfree methods · Mortar methods |
|  |
| 无网格方法 | 光滑粒子流体动力学 (SPH) · 移动粒子半隐式法 (MPS) · Material point method (MPM) |
|  |
| 区域分解法 | Schur complement method · Fictitious domain method · Schwarz alternating method · Additive Schwarz method · Abstract additive Schwarz method · Neumann–Dirichlet method · Neumann–Neumann methods · Poincaré–Steklov operator · Balancing domain decomposition · BDDC · FETI · FETI-DP |
|  |
| 其他方法 | 谱方法 · 拟谱方法 · Method of lines · 多重网格法 · Collocation method · 水平集方法 · Boundary element method · Analytic element method · Particle-in-cell · 無限差分法 · 無限单元法 · 基本解方法 |

 |