克蘭克－尼科爾森方法是一種數值分析的有限差分法，可用於數值求解熱方程以及類似形式的偏微分方程。它在時間方向上是隱式的二階方法，可以寫成隱式的龍格－庫塔法，數值穩定。該方法誕生於 20 世紀，由約翰克蘭克與菲利斯尼科爾森發展。 可以證明克蘭克－尼科爾森方法對於擴散方程（以及許多其他方程）是無條件穩定 Example 332 shows that CrankNicolson is unconditionally stable when applied to u_tau_xx。但是，如果時間步長 Δ 乘以熱擴散率，再除以空間步長平方 Δ 的值過大（根據馮諾依曼穩定性分析，以大於 12 為準），近似解中將存在虛假的振盪或衰減。基於這個原因，當要求大時間步或高空間解析度的時候，往往會採用數值精確較差的後向尤拉法進行計算，這樣即可以保證穩定，又避免瞭解的偽振盪。 方法 克蘭克－尼科爾森方法在空間域上的使用中心差分；而時間域上應用梯形公式，保證了時間域上的二階收斂。例如，一維偏微分方程 frac partial upartial t Fleft u x t frac partial upartial x frac partial2 upartial x2right 令 u i Delta x n Delta t u_in，則透過克蘭克－尼科爾森方法匯出的差分方程是第 n 步上採用前向尤拉方法與第 n1 步上採用後向尤拉方法的平均值（注意，克蘭克－尼科爾森方法本身不是這兩種方法簡單地取平均，方程對解隱式依賴）。 frac u_in 1 u_inDelta t F_inleft u x t frac partial upartial x frac partial2 upartial x2right 前向尤拉方法 frac u_in 1 u_inDelta t F_in 1left u x t frac partial upartial x frac partial2 upartial x2right 後向尤拉方法 frac u_in 1 u_inDelta t frac 12left F_in 1left u x t frac partial upartial x frac partial2 upartial x2right F_inleft u x t frac partial upartial x frac partial2 upartial x2right right 克蘭克－尼科爾森方法 對於 F，透過中心差分方法使其在空間上是離散的。 注意，這是一個隱式方法，需要求解代數方程組以得到時間域上的下一個 u 值。如果偏微分方程是非線性的，中心差分後得到的方程依舊是非線性方程系統，因此在時間步上推進會涉及求解非線性代數方程組。許多問題中，特別是線性擴散，代數方程中的矩陣是三對角的，透過三對角矩陣演算法可以高效求解，這樣，演算法的時間複雜度由直接求解全矩陣的 mathcal On3 轉化為 mathcal On。 示例 線性擴散問題 線性擴散方程 frac partial upartial t a frac partial2 upartial x2 透過克蘭克－尼科爾森方法將得到離散方程 frac u_in 1 u_inDelta t frac a2 Delta x2left u_i 1n 1 2 u_in 1 u_i 1n 1 u_i 1n 2 u_in u_i 1n right 引入變數 r frac a Delta t2 Delta x2 r u_i 1n 1 1 2 r u_in 1 r u_i 1n 1 r u_i 1n 1 2 r u_in r u_i 1n 這是一個三對角問題，應用三對角矩陣演算法（追趕法）即可得到 u_in1，而不需要對矩陣直接求逆。 準線性擴散方程 frac partial upartial t a u frac partial2 upartial x2 離散化後則會得到非線性方程系統。但是某些情況下，透過使用 a 的舊值，即用 a_inu 替代 a_in 1u，可將問題線性化。其他時候，也可能在保證穩定性的基礎上使用顯式方法估計 a_in 1u 一維多通道連線的擴散問題 這種模型可以用於描述水流中含穩定汙染流，但只有一維資訊的情況。它可以簡化為一維問題並得到有價值的資訊。 可對水中汙染溶質富集的問題進行建模，這種問題由三部分組成：已知的擴散方程（D_x 為常量），平流分量（即由速度場導致的系統在空間上的變化，表示為常量 Ux），以及與縱向通道 k 旁流的相互作用。 langle 0 ranglefrac partial Cpartial t D_x frac partial2 Cpartial x2 U_x frac partial Cpartial x k CC_Nk CC_M 其中 C 表示汙染物的富集水平，下標 N 和 M 分別對應上一通道和下一通道。 克蘭克－尼科爾森方法（i 對應位置，j 對應時間）將以上偏微分方程中的每個部分變換為 langle 1 rangle frac partial Cpartial t frac C_ij 1 C_ijDelta t langle 2 ranglefrac partial2 Cpartial x2 frac 12 Delta x2left C_i 1j 1 2 C_ij 1 C_i 1j 1 C_i 1j 2 C_ij C_i 1j right langle 3 ranglefrac partial Cpartial x frac 12left frac C_i 1j 1 C_i 1j 12 Delta x frac C_i 1j C_i 1j2 Delta x right langle 4 rangle C frac 12 C_ij1 C_ij langle 5 rangle C_N frac 12 C_Nij1 C_Nij langle 6 rangle C_M frac 12 C_Mij1 C_Mij 現在引入以下常量用於簡化計算： lambda frac D_xDelta t2 Delta x2 alpha frac U_xDelta t4 Delta x beta frac kDelta t2 把 1 2 3 4 5 6 α β 和 λ 代入 0 把新時間項 j1 代入到左邊，當前時間項 j 代入到右邊，將得到 beta C_Nij1lambdaalpha C_i1j1 12lambda2beta C_ij1lambdaalpha C_i1j1beta C_Mij1 beta C_Nijlambdaalpha C_i1j 12lambda2beta C_ijlambdaalpha C_i1jbeta C_Mij 第一個通道只能與下一個通道 M 有關係，因此表示式可以簡化為： lambdaalpha C_i1j1 12lambdabeta C_ij1lambdaalpha C_i1j1beta C_Mij1 lambdaalpha C_i1j 12lambdabeta C_ijlambdaalpha C_i1jbeta C_Mij 同樣地， 最後一個通道只與前一個通道（N）有關聯，因此表示式可以簡化為 beta C_Nij1lambdaalpha C_i1j1 12lambdabeta C_ij1lambdaalpha C_i1j1 beta C_Nijlambdaalpha C_i1j 12lambdabeta C_ijlambdaalpha C_i1j 為求解此線性方程組，需要知道邊界條件在通道始端就已經給定了。 C_0j 當前時間步某通道的初始條件 C_0j1 下一時間步某通道的初始條件 C_N0j 前一通道到當前時間步下某通道的初始條件 C_M0j 下一通道到當前時間步下某通道的初始條件 對於通道的末端最後一個節點，最方便的條件是是絕熱近似，則 frac partial Cpartial x_xz frac C_i 1 C_i 12 Delta x 0 當且只當 C_i 1j1 C_i 1j1 時，這一條件才被滿足。 以 3 個通道，5 個節點為例，可以將線性系統問題表示為 begin bmatrix AAend bmatrixbegin bmatrix Cj1end bmatrixBBCjd 其中， mathbf Cj1 begin bmatrix C_11j1 C_12j1 C_13j1 C_14j1 C_21j1 C_22j1 C_23j1 C_24j1 C_31j1 C_32j1 C_33j1 C_34j1 end bmatrix mathbf Cj begin bmatrix C_11j C_12j C_13j C_14j C_21j C_22j C_23j C_24j C_31j C_32j C_33j C_34j end bmatrix 需要清楚的是，AA 和 BB 是由四個不同子矩陣組成的矩陣， mathbf AA begin bmatrix AA1 AA3 0 AA3 AA2 AA3 0 AA3 AA1end bmatrix mathbf BB begin bmatrix BB1 AA3 0 AA3 BB2 AA3 0 AA3 BB1end bmatrix 其中上述矩陣的的矩陣元對應於下一個矩陣和額外的 4x4 零矩陣。請注意，矩陣 AA 和 BB 的大小為 12x12 mathbf AA1 begin bmatrix 12lambdabeta lambdaalpha 0 0 lambdaalpha 12lambdabeta lambdaalpha 0 0 lambdaalpha 12lambdabeta lambdaalpha 0 0 2lambda 12lambdabetaend bmatrix mathbf AA2 begin bmatrix 12lambda2beta lambdaalpha 0 0 lambdaalpha 12lambda2beta lambdaalpha 0 0 lambdaalpha 12lambda2beta lambdaalpha 0 0 2lambda 12lambda2beta end bmatrix mathbf AA3 begin bmatrix beta 0 0 0 0 beta 0 0 0 0 beta 0 0 0 0 beta end bmatrix mathbf BB1 begin bmatrix 12lambdabeta lambdaalpha 0 0 lambdaalpha 12lambdabeta lambdaalpha 0 0 lambdaalpha 12lambdabeta lambdaalpha 0 0 2lambda 12lambdabetaend bmatrix mathbf BB2 begin bmatrix 12lambda2beta lambdaalpha 0 0 lambdaalpha 12lambda2beta lambdaalpha 0 0 lambdaalpha 12lambda2beta lambdaalpha 0 0 2lambda 12lambda2beta end bmatrix 這裡的 d 向量用於保證邊界條件成立。在此示例中為 12x1 的向量。 mathbf d begin bmatrix lambdaalphaC_10j1C_10j 0 0 0 lambdaalphaC_20j1C_20j 0 0 0 lambdaalphaC_30j1C_30j 0 0 0end bmatrix 為了找到任意時間下汙染物的聚集情況，需要對以下方程進行迭代計算： begin bmatrix Cj1end bmatrixbegin bmatrix AA1end bmatrixBBCjd 二維擴散問題 將擴散問題延伸到二維的，推導方程類似，但結果會是 linken 帶形矩陣 Banded matrix 的方程式，不是三角矩陣，二維的熱方程 frac partial upartial t a left frac partial2 upartial x2 frac partial2 upartial y2right 假設網格滿足 Delta x Delta y 的特性，即可透過克蘭克－尼科爾森方法將得到離散方程 begin align u_ijn1 u_ijn frac 12 frac a Delta tDelta x2 big u_i1jn1 u_i1jn1 u_ij1n1 u_ij1n1 4u_ijn1 qquad u_i1jn u_i1jn u_ij1n u_ij1n 4u_ijnbigend align 此方程可以再重組，配合再進行簡化 mu frac a Delta tDelta x2 在克蘭克－尼科爾森方法下，不需要為了穩定性而限制柯朗數的上限，不過為了數值穩定度，柯朗數仍不能太高，可以將方程式重寫如下： begin align1 2mu u_ijn1 frac mu2left u_i1jn1 u_i1jn1 u_ij1n1 u_ij1n1right quad 1 2mu u_ijn frac mu2left u_i1jn u_i1jn u_ij1n u_ij1nrightend align 應用在金融數學上 許多的現象都可以用熱方程（金融數學上稱為擴散方程）來建模，因此克蘭克－尼科爾森方法也可以用在這些領域中。尤其金融衍生工具定價用的布萊克 休斯模型可以轉換為熱方程，因此期權定價的數值解可以用克蘭克－尼科爾森方法求得。 因為期權定價若超過基本假設（例如改變股息）時，無法求得解析解，需要用上述方式求得。不過若是非平滑的最後條件（大部份的金融商品都是如此），克蘭克－尼科爾森方法會有數值的震盪，無法用濾波方式平緩。在期權定價上會反映在履約價 Γ 的變動。因此，一開始幾個步驟需要用其他比較不會震盪的方法（如全隱式有限差分法）。 相關條目 金融數學 梯形法則 微分方程 參考資料 Category 金融數學 Category 數值微分方程 Category 有限差分