補間法 - ビジネス

5.2 グレゴリー・ニュートン(Gregory-Newton)の補間式
(1)導入
次のような点列に対する補間式を考える。
x1
f ( x1 )
x2
f ( x2 )
f ( x)  a1  a2 ( x  x1 )  a2 ( x  x1 )(x  x2 )  
 an1 ( x  x1 )(x  x2 )()(x  xn )

xn
f ( xn )
点列を代入すると,代入の繰返しで係数を求めることができる。
f ( x1 )  a1
f ( x2 )  a1  a2 ( x 2  x1 )
f ( x3 )  a1  a2 ( x3  x1 )  a2 ( x3  x1 )(x3  x2 )

f ( xn 1 )  a1  a2 ( xn 1  x1 )  a2 ( xn 1  x1 )(xn 1  x2 )  
 an 1 ( xn 1  x1 )(xn 1  x2 )()(xn 1  xn )
[参考]
概念的には,多項式補間を次のような三角行列に変換したことと同じ。
 n
 ( xn 1  x j )
 j 1



0

0


0

また
n 1
 ( xn1  x j )
j 1

0
0
0

( xn 1  x1 ) 1 an 1   f ( xn 1 )
     
 



 
 a3    f ( x3 ) 

( x3  x1 )(x3  x2 ) ( x3  x1 ) 1 
 a 2   f ( x2 ) 
 

0
( x2  x1 ) 1 
 a1   f ( x1 ) 

0
0
1

xi  xi  x j
であるから多項式補間より係数の絶対値の比率は一般に小さくなる。
(2)等間隔法①
表データは,独立変数を等間隔に並べていることが多いので,点間の幅を h
とすると,
h  x2  x1  x3  x2    xn1  xn
f ( x1 )  a1
f ( x1  h)  a1  a2 (h)
f ( x1  2h)  a1  a2 (2h)  a3 (2h)(h)
f ( x1  3h)  a1  a2 (3h)  a3 (3h)(2h)  a4 (3h)(2h)(h)

f ( x1  nh)  a1  na2 (nh)  a3 (nh)(n  1)h  a4 (nh)(n  1)h(n  2)h
 an 1 (nh)(n  1)h(n  2)h (h)
(2)等間隔法②
係数を求めると
a1  f ( x1 )
f ( x1  h)  f ( x1 )
a2 
h
f ( x1  2h)  2 f ( x1  h)  f ( x1 )
a3 
2
2h
f ( x1  3h)  3 f ( x1  2h)  3 f ( x1  h)  f ( x1 )
a4 
3
3  2h

(2)等間隔法③
次のような記法を導入
f ( x1 )  f ( x1  h)  f ( x1 )
 f ( x1 )  f ( x1  2h)  2 f ( x1  h)  f ( x1 )
2
 f ( x1 )  f ( x1  3h)  3 f ( x1  2h)  3 f ( x1  h)  f ( x1 )
3

コーヒーブレーク(Pascalの三角形を思い出そう)
さらに次のようにおく
1
x  x1  uh
1
1
1
1
2
5
1
3
3
6
4
1
1
10
1
4
10
1
5
1
(2)等間隔法④
整理すると
2 f ( x1 )
f ( x)  p(u )  f ( x1 )  f ( x1 )u 
u (u  1)
2!
3 f ( x1 )

u (u  1)(u  2) 
3!
n
 f ( x1 )

u (u  1)(u  2)()(u  (n  1))
n!
この式をグレゴリ・ニュートンの補間式と呼ぶ
計算すると(ただしExcelで定義しよう)
f (0)  0.17365 0.0000 0.17365
(3)例
X(度) sin(X)
0
0.0000
2 f (0)  0.34202 2  0.17365 0.0000
10
0.17365
 0.00528
20
0.34202
30
0.50000
3 f (0)  0.50000 3  0.34202
0.64279
 3  0.17365 0.0000 0.00512 40
4 f (0)  0.64279 4  0.50000 6  0.34202
 4  0.17365 0.0000 0.000316
u  ( x  x1 ) h  (22  0) 10  2.2
0.00528
p (u )  0.0000 0.17365u 
u (u  1)
2
0.00512
0.000316

u (u  1)(u  2) 
u (u  1)(u  2)
3 2
4  3 2
 0.374606
(4)Excelでの定義
VBAでのプログラム
①データ設定とボタンのClickイベントハンドラ
Private X(5) As Double
Private FY(5) As Double
Private UX As Double
Sub データ設定()
XX = 0: DX = 10
For i = 1 To 5
X(i) = XX: FY(i) = Sin(XX * 3.1415926 / 180)
XX = XX + DX
Next
UX = (22 - X(1)) / DX
End Sub
Sub ボタン1_Click()
データ設定
R = Gregory(FY, UX, 5)
MsgBox " 結果=" & R
End Sub
VBAでのプログラム
②組合せ数と階乗の計算
Function Comb(N, R) As Long '組合せ回数の計算
If R = 0 Or R = N Then
Comb = 1
ElseIf R = 1 Then
Comb = N
Else
Comb = Comb(N - 1, R - 1) + Comb(N - 1, R)
End If
End Function
Function Fact(N) As Double '階乗の計算
Dim D As Double
D = 1
For i = 2 To N
D = D * i
Next
Fact = D
End Function
VBAでのプログラム
③差分計算と補間計算
Function 差分計算(i, FY) As Double
A = 0: Sign = 1
For k = i To 2 Step -1
C = Comb(i - 1, k - 1)
A = A + C * Sign * FY(k)
Sign = -Sign
Next
差分計算 = A + Sign * FY(1)
End Function
Function 補間計算(i, UX) As Double
U = UX: T = 1
For k = 2 To i
T = T * U: U = U - 1
Next
補間計算 = T
End Function
VBAでのプログラム
④クレゴリ・ニュートンの補間式の計算
Function Gregory(FY, UX, N)
T = 0
For i = 1 To N
A = FY(1): ii=i
If i >= 2 Then A = A = 差分計算(i, FY) * 補間計算(i, UX)/ Fact(ii)
T = T + A
Next
Gregory = T
End Function
[補足] 例題のプログラムの問題点
Function Comb2(N, R) As Long
Dim A() As Double
ReDim A(N)
NN = N: RR = R
If NN - RR < RR Then RR = N - R
If RR = 0 Then
Comb2 = 1
ElseIf RR = 1 Then
Comb2 = N
Else
For i = 2 To RR
A(i) = i + 1
Next
For i = 1 To NN - R - 1
A(1) = i + 2
For j = 2 To RR
A(j) = A(j - 1) + A(j)
Next
Next
Comb2 = A(RR)
End If
End Function
組合せ個数を計算するのに,
nC0=nCn=1, nC1=n,
nCr=n-1Cr-1+n-1Cr
の定義どおり処理しているが,
たとえば,10C5を求めるのに9C4と9C5を使い,
さらに9C5を求めるにも8C4を使う。
このようにまったく同じ計算が何回も出てくる。
左のプログラムでは, nC1から計算して,
結果を配列に保存することで,
無駄な計算を省いている。
課題1
以下のデータは,ある斜面の高さを100m間隔で測定した結果である。グレゴリーニ
ュートンのプサンプルログラムを用いて,250m位置の高さを求めよ。
位置(m)
高さ(m)
0
185
100
186
200
188
300
190
400
191
500
192
課題2
高さhと角度θを示す衛星の軌道データは以下のとおりである。
このデータを用いて,t=1,200秒の衛星位置(高さとθ)を推定せよ
。
なお,時間tは衛星が軌道に入った後の時間とする。
衛星
t(秒)
高さ h(mile)
θ(度)
0
100
0
300
107
22
600
160
42
900
230
62
高さ
θ
地球
課題3
バリスタ(非線形抵抗器)の電圧・電流を測定したところ以下のようになった。
このバリスタの特性を示す3次補間式を作れ。
E(ボルト)
I(アンペア)
0
0
10
0.36
20
0.49
30
0.62