計算物理学2第5回:数値微分・積分
ver. 2018/5/17
1 数値微分
x
ix
i+1x
i+2x
f(x)
x
i+3x
i+4x
i-1x
i-2x
i-3x
i-4f(x
i)
f(x
i+2)
f(x
i-1)
h f(x
i+1)
f(x
i+4) f(x
i+3)
f(x
i-2) f(x
i-3)
f(x
i-4) f’(x
i)(x-x
i)+f(x
i)
図
1
数値計算では関数f(x)
の等間隔点x
iでの値を配列に保存しており、これを用いてx = x
iでの微分f
′(x
i)
の近似値を求める。関数
f (x)
のx = a
での微分はf ′ (a) ≡ lim
h → 0
f (a + h) − f (a)
h (1)
で与えられます。数値計算では極限を取ることはできないので十分に小さい
h
を取って差分によって微分を 表現することしかできません。最も簡単に見積もるには定義式に基づいてf ′ (a) = f (a + h) − f (a)
h + O (h) (2)
を使えばよいのですが、この誤差は
h
のオーダーとなるため、この式で精度をあげるためにはh
を小さくす る必要があります。しかしながら、実際の数値計算では等間隔に決められたx
に対して(x k = kh)
、f (x k )
の 値が既知ですが、その間隔h
を変更することができないことがあります。h
の値を変えることなく、微分の精 度を上げることが必要です。以下ではそのような場合を考え、x = x i
での微係数f ′ (x i )
を、x i
付近の等間隔 に配置された点x = x k
でのf (x k )
を用いて精度良く求める方法を議論します。以下ではf i = f (x i )
と省略 します。f (x)
のx = x i
でのTaylor
展開を用いるとf i+1 =f (x i + h) = f (x i ) + f ′ (x i )h + 1
2 f ′′ (x i )h 2 + 1
3! f (3) (x i )h 3 + O (h 4 ) (3) f i − 1 =f (x i − h) = f (x i ) − f ′ (x i )h + 1
2 f ′′ (x i )h 2 − 1
3! f (3) (x i )h 3 + O (h 4 ) (4)
となるのでf ′ (x i ) = − f i − 1 + f i+1
2h + O (h 2 ) (5)
とすることで二階微分
f ′′ (x i )
の項を消去することができ、微分の精度を上げることができます。これは3点 公式と呼ばれ、f i+1
とf i − 1
の値があれば、式(2)
と全く同じ計算量でよりよい値が計算できます。さらに精度を上げるためには、
f i+2
とf i − 2
を使ってf (3) (x i )
を消去することで5
点公式が導出できます。f i+2 =f (x i + 2h) = f(x i ) + f ′ (x i )2h + 1
2 f ′′ (x i )(2h) 2 + 1
3! f (3) (x i )(2h) 3 + O (h 4 ) (6) f i − 2 =f (x i − 2h) = f(x i ) − f ′ (x i )2h + 1
2 f ′′ (x i )(2h) 2 − 1
3! f (3) (x i )(2h) 3 + O (h 4 ) (7)
よりf ′ (x i ) = f i − 2 − 8f i − 1 + 8f i+1 − f i+2
12h + O (h 4 ) (8)
同様に
7
点公式はf i − 3 , f i+3
も用いてf ′ (x i ) = − f i − 3 + 9f i − 2 − 45f i − 1 + 45f i+1 − 9f i+2 + f i+3
60h + O (h 6 ) (9)
9
点公式はf i − 4 , f i+4
も用いてf ′ (x i ) = 3f i − 4 − 32f i − 3 + 168f i − 2 − 672f i − 1 + 672f i+1 − 168f i+2 + 32f i+3 − 3f i+4
840h + O (h 8 ) (10)
となります。
高階微分についても同様に計算できます。
2
階微分の最も簡単な3
点公式は式(3)
と(4)
からf ′ (x i )
を消去 することによりf ′′ (x i ) = f i − 1 − 2f i + f i+1
h 2 + O (h 2 ) (11)
となります。同様に
2
階微分の5,7,9
点公式はf ′′ (x i ) = − f i − 2 + 16f i − 1 − 30f i + 16f i+1 − f i+2
12h 2 + O (h 4 ) (5
点公式) (12)
f ′′ (x i ) = 2f i − 3 − 27f i − 2 + 270f i − 1 − 490f i + 270f i+1 − 27f i+2 + 2f i+3
180h 2 + O (h 6 ) (7
点公式) (13)
f ′′ (x i ) = − 9f i − 4 + 128f i − 3 − 1008f i − 2 + 8064f i − 1 − 14350f i + 8064f i+1 − 1008f i+2 + 128f i+3 − 9f i+4
5040h 2
+ O (h 8 ) (9
点公式) (14)
となります。
2 数値積分
x
ix
i+1b=x
Nx
f(x)
x
i-1x
i-2f(x
i) f(x
i-1)
h f(x
i+1)
a=x
0... ...
図
2
数値計算では関数f(x)
の等間隔点x
iでの値を配列に保存しており、これを用いて区間[a, b]
での定 積分の値を求める.
青は短冊による面積の評価、オレンジは台形公式による評価。区間
[a, b]
での定積分は、x 0 = a, x N = b
とおいてx
をN
等分するとh = (b − a)/N
で∫ b a
f (x)dx = lim
h → 0 N ∑ − 1
i=0
f (x i )h (15)
として区分求積として定義できます。ここで
x i = x 0 + ih
です。微分のときと同様に、数値計算では極限を とることができないため、有限のh
やN
を用いて評価することとなります。極限をとらずにこの式をそのま ま用いるとやはり精度がよくないため、これを改良した公式を導出します。まずは定積分の区間を∫ b=x
Na=x
0dx =
∫ x
1x
0+
∫ x
2x
1+ · · ·
∫ x
N−1x
N−2+
∫ x
Nx
N−1dx (16)
というように幅
h
の狭い分割し、このうちの特定の区間、例えば∫ x
i+1=x
i+h x
i−1=x
i− h
f (x)dx (17)
の積分値の評価したあと、これを足し合わせます
(
合成積分公式)
。微分のときと同様にx = x i
まわりで被積 分関数f (x)
を展開します。f (x i + h) = f (x i ) + f ′ (x i )h + 1
2 f ′′ (x i )h 2 + 1
6! f (3) (x i )h 3 + O (h 4 ) (18)
まずは最低次だけをとると
∫ x
i+1x
i−1f (x)dx =
∫ x
i+h x
i− h
[f (x i ) + O (h)]dx = 2f (x i )h + O (h 2 ) (19)
となり、区間[x i − 1 , x i+1 ]
の中心x = x i
での関数の値f(x i )
を用いて幅2h
短冊の面積を計算していることに なります。もとの定積分の値はこれを足し合わせて∫ x
Nx
0f (x)dx = (∫ x
2x
0+
∫ x
4x
2+ · · ·
∫ x
N−2x
N−4+
∫ x
Nx
N−2)
f (x)dx = 2[f (x 1 ) + f (x 3 ) + · · · f (x N − 3 ) + f (x N − 1 )]h + O (h) (20)
となります。
2.1
台形公式Taylor
展開の1
次までとりいれて、区間[x i − 1 , x i ]
と[x i , x i+1 ]
を別々に評価するとf (x) =
f (x i ) + f (x i ) − f (x i − h)
h (x − x i ) + O (h 2 ) (x i − h ≤ x ≤ x i ) f (x i ) + f (x i + h) − f (x i )
h (x − x i ) + O (h 2 ) (x i ≤ x ≤ x i + h)
(21)
これを用いて、
∫ x
i+1x
i−1f (x)dx =
∫ x
ix
i−1f (x)dx +
∫ x
i+1x
if (x)dx
=
∫ x
ix
i− h
[
f (x i ) + f (x i ) − f (x i − 1 )
h (x − x i ) ]
dx +
∫ x
i+h x
i[
f(x i ) + f (x i+1 ) − f (x i )
h (x − x i ) ]
dx + O (h 3 )
=hf(x i ) + f (x i ) − f (x i − 1 ) h
(
− 1 2 h 2
)
+ hf(x i ) + f (x i+1 ) − f (x i ) h
1
2 h 2 + O (h 3 )
= h
2 [f (x i − 1 ) + 2f (x i ) + f (x i+1 )] + O (h 3 ) (22)
この公式では[x i − h, x i ]
および[x i , x i + h]
の領域で関数を直線で近似し、台形の面積を評価しているため、台形公式と呼ばれます。全区間を足し合わせると
∫ x
Nx
0f (x)dx
= h
2 { [f (x 0 ) + 2f (x 1 ) + f (x 2 )] + [f (x 2 ) + 2f (x 3 ) + f (x 4 )] + · · · + [f (x N − 2 ) + 2f (x N − 1 ) + f (x N )] } + O (h 2 )
= h [ 1
2 f (x 0 ) + f (x 1 ) + f (x 2 ) + · · · + f (x N − 2 ) + f (x N − 1 ) + 1 2 f (x N )
]
+ O (h 2 ) (23)
となり、区分求積法による評価とほとんど同じ形ですが、両端では
1/2
の因子がかかります。2.2 Simpson
の公式Taylor
展開でのh 2
の項までを評価します。f (x) = f (x i ) + f ′ (x i )(x − x i ) + 1
2 f ′′ (x i )(x − x i ) 2 + O (h 3 ) (24)
これを用いて計算すると
∫ x
i+1x
i−1f (x)dx =
∫ x
i+1x
i−1[
f (x i ) + f ′ (x i )(x − x i ) + 1
2 f ′′ (x i )(x − x i ) 2 + O (h 3 ) ]
dx
=2hf (x i ) + 1
3 f ′′ (x i )h 3 + O (h 5 )
= h
3 [f (x i − 1 ) + 4f (x i ) + f (x i+1 )] + O (h 5 ) (25)
最後の等式では二階微分f ′′ (x i )
に対して3
点公式(11)
を用いました。Taylor
展開の3
次の項(x − x i ) 3
は この積分には効かないため、台形公式よりもh 2
も精度が向上しています。全区間で定積分を行うと∫ x
Nx
0f (x)dx = h
3 [f (x 0 ) + 4f (x 1 ) + 2f (x 2 ) + 4f (x 3 ) + · · · + 2f (x N − 2 ) + 4f (x N − 1 ) + f (x N )] (26)
となります。この公式を用いるためにはN
を偶数に取る必要があります。2.3 Simpson
の3/8
公式、Boole
の公式さ ら に
3
次 お よ び4
次 ま でTaylor
展 開 を 行 う こ と で 、精 度 を 向 上 さ せ る こ と が で き ま す 。x i , x i+1 , x i+2 , x i+3
の4
点を用いて∫ x
i+3x
if (x)dx = 3h
8 [f (x i ) + 3f(x i+1 ) + 3f (x i+2 ) + f (x i+3 )] + O (h 5 ) (27)
としたものをSimpson
の3/8
公式と呼びます。全区間ではN
は3
の倍数として∫ x
Nx
0f(x)dx = 3h
8 [f (x 0 ) + 3f (x 1 ) + 3f (x 2 ) + 2f (x 3 ) + 3f (x 4 ) + 3f (x 5 ) + · · · ] + O (h 4 ) (28)
となります。また、
x i
からx i+4
までの5
点を用いて∫ x
i+4x
if (x)dx = 2h
45 [7f (x i ) + 32f (x i+1 ) + 12f (x i+2 ) + 32f (x i+3 ) + 7f (x i+4 )] + O (h 7 ) (29)
と近似したものをBoole
の公式(Bode
の公式)
と呼びます。全区間での定積分の値はN
を4
の倍数として∫ x
Nx
0f (x)dx = 2h
45 [7f (x 0 ) + 32f (x 1 ) + 12f (x 2 ) + 32f (x 3 ) + 14f (x 4 ) + 32f (x 5 ) + 12f (x 6 ) + · · · ] + O (h 6 ) (30)
と与えられます。2.4 Newton-Cotes
の公式台形公式、
Simplson
公式、3/8
公式、Boole
の公式はすべて等間隔の座標点{ x i }
でのf (x)
の値を用いて 計算していますが、これらはNewton-Cotes
の公式として以下の一つの形にまとめられます。∫ b a
f (x)dx =
∑ N i=0
w i f (x i ) (31)
ここで
w i
はそれぞれの座標点での重みであり、用いる公式によって値が異なります。2.5 Gauss
求積法座標点が等間隔に限られておらず、自由に設定できる場合は、
Newton-Cotes
の公式よりもより少ない点 数で高い精度が得られるGauss
求積法があります。Gauss
求積法では、座標点をLegendre
多項式のゼロ点(abscissa)(P n (x i ) = 0)
ととります(n
次のLegendre
多項式のn
個のゼロ点はすべて− 1 ≤ x i ≤ 1
の範囲内 にあります)
。そして重み(weight)w i
をw i = 2
(1 − x 2 i )[P n ′ (x i )] 2 (32)
ととることにより、以下の
[ − 1, 1]
区間の積分を精度良く近似することができます。∫ 1
− 1
f (x)dx ≈
∑ n i=1
w i f (x i ) (33)
これが
Gauss-Legendre
求積法です。導出は少々複雑なのでここでは省略します。x i
とw i
の値は自分で計算して求めることもできますが、教科書などに表として与えられているものも利用するとよいでしょう。
[ − 1, 1]
以外の任意の積分範囲の定積分については変数変換をすることで積分範囲を− 1 ≤ x ≤ 1
に変更し、Gauss-Legendre
の公式を適用することができます。∫ b a
f (x)dx = b − a 2
∫ 1
− 1
f ( b − a
2 x + a + b 2
)
dx ≈ b − a 2
∑ n i=1
w i f ( b − a
2 x i + a + b 2
)
(34)
ま た 、積 分 区 間 が[0, ∞ )
の 場 合 はLaguerre
多 項 式L n (x)
の ゼ ロ 点{ x i }
と 重 みw i = x i /[(n + 1) 2 [L n+1 (x i )] 2 ]
を用いて近似することができます(Gauss-Laguerre
求積法)
∫ ∞
0
e − x f (x)dx ≈
∑ n i=1
w i f (x i ) (35)
積分区間が
( −∞ , ∞ )
の場合はHermite
多項式H n (x)
のゼロ点{ x i }
と重みw i = 2 n − 1 n! √
π/(n 2 [H n − 1 (x i )] 2 )
を用いた公式も使用できます(Gauss-Hermite
求積法)
。∫ ∞
−∞
e − x
2f (x)dx ≈
∑ n i=1
w i f (x i ) (36)
3 演習問題
(19) sin x
のx = 1(rad)
での微分を以下の様々なh
の値と3
点、5
点公式による近似解と解析解cos 1
との ずれを評価し、次の表を埋めよ(
余力があれば7
点、9
点公式も)
。h 3
点公式5
点公式7
点公式9
点公式10 − 1
10 − 2 10 − 3 10 − 4 10 − 5 10 − 6 10 − 7
(20)
積分∫ 1 0
dx 1 + x
を以下の様々な