Introduction for Numerical Simulation

なぜ数値積分?
1.原始関数を求めることが難しい, また
は求めることが出来ない.
1 + 1 - x2
∫log | x | dx = ?
2.そもそも原始関数が分かっていてもそ
れを厳密に計算することが難しい.
1 + 1- x2
1 + 1- x2
∫log | x | dx = x log | x | + Arcsinx
どうやって数値積分?
1. 原始関数を求めることが難しい, または
求めることが出来ない.
2. そもそも原始関数が分かっていてもそれ
を厳密に計算することが難しい.
1. 積分する範囲を区間に分割.
2. 被積分関数を区間ごとに簡単
に原始関数を求められる関数
(例えば多項式)で近似する.
1次多項式近似 ⇒ 台形公式
2次多項式近似 ⇒ シンプソン公式
ラグランジュ補間 ⇒ ニュートン・コーツ公式
台形公式
Y = f (x )
関数 Y = f (x) を
h := (b-a)/3
の幅の区間ごとに1
次式で近似し, それ
ぞれの台形の面積で
代用する.
x0
=a
h
x1
=a + h
h
x2
h
=a + 2h
x3
=b
1
∫a f ( x ) dx ≈ 2 h (f (a ) + f ( x1 ))
1
1
+ h (f ( x 1 ) + f ( x 2 )) + h (f ( x 2 ) + f (b ))
2
2
1
= h [f (a ) + f (b ) + 2 {f ( x 1 ) + f ( x 2 )}]
2
b
台形公式のアルゴリズム
a , b, n
T
h ← (b -a ) / n
T ← (f (a) + f (b))/2
for i = 1,…,n -1
T ← T + f (a +ih )
end
T ← hT
1
∫a f (x ) dx ≈ h [ 2 {f (a ) + f (b )} + {f (x1 ) + f (x 2 )}]
b
Y = f (x )
シンプソン公式
関数 Y = f (x) を積
分区間 [a,b] で2次
のラグランジュ補間
で近似し, 面積を計
算する.
x0
=a
h
x1
=a + h
h
x2
=a + 2h
( x - x 1 )( x - x 2 )
∫a f ( x ) dx ≈ f ( x 0 ) ∫a ( x 0 - x1 )( x 0 - x 2 ) dx
b ( x - x 0 )( x - x 2 )
+ f ( x1 ) ∫
dx
a ( x - x )( x - x )
1
0
1
2
b ( x - x 0 )( x - x 1 )
+ f (x2 )∫
dx
a ( x - x )( x - x )
2
0
2
1
1
= h [f ( x 0 ) + 4f ( x 1 ) + f ( x 2 )]
3
b
b
(複合)シンプソン公式
関数 Y = f (x) を
2h := (b-a) /n
の幅の区間毎に2次
のラグランジュ補間
で近似し, それぞれ
の区間ごとにシンプ
ソン公式を適用する.
1
x0
=a
h
Y = f (x )
x1
=a + h
h
x2
h
x3
h
x4
=a + 2h =a + 3h =b
1
{ h [f ( x 2k ) + 4f ( x 2k +1 ) + f ( x 2k + 2 )]}
∫a f ( x ) dx ≈ k∑
=0 3
1
= h {[f ( x 0 ) + f ( x 4 )]
3
+ 4[f ( x 1 ) + f ( x 3 )] + 2[f ( x 2 )]}
b
(複合)シンプソン公式のアルゴリズム
a , b, n
S
h ← ( b -a ) / 2n
S ← f (a) +f (b)
for i = 1,…,n -1
S ← S + 4f (a + (2i-1)h ) + 2f (a + 2ih )
end
S ← S + 4f (a + (2n-1)h )
S ← h S/3
1
∫a f ( x ) dx ≈ 3 h [{f (a ) + f (b )}
+ 4 {f ( x 1 ) + f ( x 3 )} + 2f ( x 2 )]
b