微分積分学における微分法 (differential calculus; 微分学) の離散的対応物としての差分法 (difference calculus, calculus of (finite) difference)については「差分学 」をご覧ください。
数値解析 における有限差分法 (ゆうげんさぶんほう、英 : finite-difference methods ; FDM )あるいは単に差分法 は、微分方程式 を解くために微分 を有限差分近似 (差分商)で置き換えて得られる差分方程式 で近似するという離散化 手法を用いる数値解法 である。18世紀にオイラー が考案したと言われる[1] 。
今日ではFDMは偏微分方程式 の数値解法として支配的な手法である[2] 。
解の誤差とは、真の解析解と近似解との間の差として定義される。有限差分法における誤差の原因は丸め誤差 および打ち切り誤差 または離散化誤差 である。
有限差分法は函数の定義域を格子に離散化することに基づく
問題に対する解の近似に有限差分法を用いるためには、まず初めに問題の領域を離散化しなければならない。これは普通は、その領域を一様な格子に分ければよい。これは有限差分法がしばしば「時間刻み」な仕方で微分に対する離散的な数値近似の集合を提供することを意味することに注意。
f
(
x
i
)
=
f
(
x
0
+
i
h
)
{\displaystyle f(x_{i})=f(x_{0}+ih)}
.
一般に注目すべきは局所打ち切り誤差 (英語版 ) で、典型的にはこれを O-記法 で表す。局所打ち切り誤差は、各点における誤差について言うもので、真値 f ' (x i ) と近似値 f ' i との差
f
′
(
x
i
)
−
f
i
′
{\displaystyle f'(x_{i})-f'_{i}}
である。この誤差の評価には、テイラー展開 の剰余項を見るのが簡便である。式 f (x 0 + h ) に対するテイラー展開のラグランジュ型剰余項
R
n
(
x
0
+
h
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
(
h
)
n
+
1
(
x
0
<
ξ
<
x
0
+
h
)
{\displaystyle R_{n}(x_{0}+h)={\frac {f^{(n+1)}(\xi )}{(n+1)!}}(h)^{n+1}\quad (x_{0}<\xi <x_{0}+h)}
から、局所打ち切り誤差の支配項が求められる。例えば、一階差分近似 (n = 1 ) を考えれば
f
(
x
0
+
i
h
)
=
f
(
x
0
)
+
f
′
(
x
0
)
i
h
+
f
″
(
ξ
)
2
!
(
i
h
)
2
{\displaystyle f(x_{0}+ih)=f(x_{0})+f'(x_{0})ih+{\frac {f''(\xi )}{2!}}(ih)^{2}}
である。この右辺は有限差分法で得られる近似値である。一方、0階差分近似(n=0)を考えれば
f
(
x
0
+
i
h
)
=
f
(
x
0
)
+
f
′
(
x
0
)
i
h
{\displaystyle f(x_{0}+ih)=f(x_{0})+f'(x_{0})ih}
よって、0階差分近似での支配的な誤差は
f
″
(
ξ
)
2
!
(
i
h
)
2
{\displaystyle {\frac {f''(\xi )}{2!}}(ih)^{2}}
であり、この剰余項(n=1)が局所打ち切り誤差の支配項である。この場合、局所打ち切り誤差はほぼ刻み幅(h)の2乗に比例するということになる。有限差分法の近似解の精度と計算量は方程式の離散化の仕方や刻み幅の取り方に依存する。これらは刻み幅を小さくするにつれ著しく増加する[3] から、実用上は必要な精度と計算時間を天秤にかけて十分合理的な条件で近似を行う。時間の刻み幅が大きければ多くの場合に計算速度は早くなるが、大きくしすぎると不安定性を生じ、データの精度に問題がでる[4] [5] 。
数値モデルの安定性を決定するために、フォン・ノイマンの安定性解析 を用いるのが普通である[4] [5] [6] [7] 。
最も簡単な例として、次の1階常微分方程式 を考える:
u
′
(
x
)
=
3
u
(
x
)
+
2
{\displaystyle u'(x)=3u(x)+2\,}
これを解くには、差分商
u
(
x
+
h
)
−
u
(
x
)
h
≈
u
′
(
x
)
(
h
→
0
)
{\displaystyle {\frac {u(x+h)-u(x)}{h}}\approx u'(x)\quad (h\to 0)}
を用いて
u
(
x
+
h
)
=
u
(
x
)
+
h
(
3
u
(
x
)
+
2
)
{\displaystyle u(x+h)=u(x)+h(3u(x)+2)\,}
と近似する。この方法をオイラー法 という。この最後の方程式 のように、微分方程式の微分を差分商に置き換えたものを、差分方程式 (さぶんほうていしき、difference equation )と呼ぶ。
偏微分方程式の例として、一様ディリクレ境界条件 に従う1次元規格化熱伝導方程式 を考える:
U
t
=
U
x
x
{\displaystyle U_{t}=U_{xx}\,}
左辺は時刻
t
{\displaystyle t}
による微分 、右辺は座標
x
{\displaystyle x}
による2階微分である。また、境界条件および初期条件は以下とする:
U
(
0
,
t
)
=
U
(
1
,
t
)
=
0
{\displaystyle U(0,t)=U(1,t)=0\,}
(境界条件)
U
(
x
,
0
)
=
U
0
(
x
)
{\displaystyle U(x,0)=U_{0}(x)\,}
(初期条件)
これを数値的に解く1つの方法は、すべての微分を差分で近似することである。空間の領域をメッシュ
x
0
,
…
,
x
J
{\displaystyle x_{0},\dots ,x_{J}}
で、時間の領域をメッシュ
t
0
,
…
,
t
N
{\displaystyle t_{0},\dots ,t_{N}}
で分割しよう。どちらの分割も等間隔とし、空間点の間隔を
h
{\displaystyle h}
、時刻の間隔を
k
{\displaystyle k}
とする。
U
(
x
j
,
t
n
)
{\displaystyle U(x_{j},t_{n})}
の数値的近似を
u
j
n
{\displaystyle u_{j}^{n}}
で表す。
陰解法
時刻
t
n
+
1
{\displaystyle t_{n+1}}
に後退差分を用い、空間点
x
j
{\displaystyle x_{j}}
で2階中央差分を用いれば、漸化式:
u
j
n
+
1
−
u
j
n
k
Δ
t
=
u
j
+
1
n
+
1
−
2
u
j
n
+
1
+
u
j
−
1
n
+
1
h
2
{\displaystyle {\frac {u_{j}^{n+1}-u_{j}^{n}}{k\Delta t}}={\frac {u_{j+1}^{n+1}-2u_{j}^{n+1}+u_{j-1}^{n+1}}{h^{2}}}\,}
が得られる。これを陰解法という。
線形方程式系:
(
1
+
2
r
)
u
j
n
+
1
−
r
u
j
−
1
n
+
1
−
r
u
j
+
1
n
+
1
=
u
j
n
{\displaystyle (1+2r)u_{j}^{n+1}-ru_{j-1}^{n+1}-ru_{j+1}^{n+1}=u_{j}^{n}}
を解けば、
u
j
n
+
1
{\displaystyle u_{j}^{n+1}}
が得られる。この方法は常に数値的に安定で収束するが、時刻ごとに方程式系を解く必要があるため、陽解法よりも繁雑である。誤差は時間ステップ数と空間ステップ数の4乗とに比例する。
クランク・ニコルソン法
さいごに、時刻
t
n
+
1
/
2
{\displaystyle t_{n+1/2}}
で中央差分を、空間点
x
j
{\displaystyle x_{j}}
での空間微分に2階中央差分を用いれば、漸化式:
2
(
u
j
n
+
1
−
u
j
n
k
Δ
t
)
=
u
j
+
1
n
+
1
−
2
u
j
n
+
1
+
u
j
−
1
n
+
1
h
2
+
u
j
+
1
n
−
2
u
j
n
+
u
j
−
1
n
h
2
{\displaystyle 2\left({\frac {u_{j}^{n+1}-u_{j}^{n}}{k\Delta t}}\right)={\frac {u_{j+1}^{n+1}-2u_{j}^{n+1}+u_{j-1}^{n+1}}{h^{2}}}+{\frac {u_{j+1}^{n}-2u_{j}^{n}+u_{j-1}^{n}}{h^{2}}}\,}
が得られる。これをクランク・ニコルソン法(Crank-Nicolson method )という。
線形方程式系:
(
2
+
2
r
)
u
j
n
+
1
−
r
u
j
−
1
n
+
1
−
r
u
j
+
1
n
+
1
=
(
2
−
2
r
)
u
j
n
+
r
u
j
−
1
n
+
r
u
j
+
1
n
{\displaystyle (2+2r)u_{j}^{n+1}-ru_{j-1}^{n+1}-ru_{j+1}^{n+1}=(2-2r)u_{j}^{n}+ru_{j-1}^{n}+ru_{j+1}^{n}}
を解けば、
u
j
n
+
1
{\displaystyle u_{j}^{n+1}}
が得られる。
この方法は常に数値的に安定で収束するが、各時刻で方程式系を解く必要があるので繁雑なことが多い。誤差は時間ステップ数の4乗と空間ステップ数の2乗とに比例する:
Δ
u
=
O
(
k
2
)
+
O
(
h
4
)
{\displaystyle \Delta u=O(k^{2})+O(h^{4})\,}
しかし、境界付近では誤差はO(h 4 ) でなくO(h 2 ) となることが多い。
クランク・ニコルソン法は時間ステップ数が少なければたいてい最も正確な方法である。陽解法はそれより正確でなく不安定でもあるが、最も実行しやすく、繁雑さも最も少ない。陰解法は時間ステップ数が多い場合に最も優れている。
Joel H. Ferziger; Milovan Perić 著、小林敏雄、谷口伸行、坪倉誠 訳『コンピュータによる流体力学』シュプリンガー・フェアラーク東京、2003年、36頁。ISBN 4-431-70842-1 。
Christian Grossmann; Hans-G. Roos; Martin Stynes (2007). Numerical Treatment of Partial Differential Equations . Springer Science & Business Media. p. 23. ISBN 978-3-540-71584-9
Arieh Iserlas (2008). A first course in the numerical analysis of differential equations . Cambridge University Press. p. 23. ISBN 9780521734905
Hoffman JD; Frankel S (2001). Numerical methods for engineers and scientists . CRC Press, Boca Raton
Jaluria Y; Atluri S (1994). “Computational heat transfer”. Computational Mechanics 14 : 385–386. doi :10.1007/BF00377593 .
Majumdar P (2005). Computational methods for heat and mass transfer (1st ed.). Taylor and Francis, New York
Smith GD (1985). Numerical solution of partial differential equations: finite difference methods (3rd ed.). Oxford University Press