5.補間法

5.補間法
表に現れていないデータから
任意の独立変数に対する
関数値を求める
応用分野
• 数表に与えられていない任意の値を読み
取る。
• 等高線データからメッシュの値を埋める。
• 線の間を滑らかに結ぶ。
5.1 線形補間と多項式補間
(1)線形補間
• 与えられたデータ間を直線で近似する。
x2  x1
f ( x)  f ( x1 ) 
x  x1
f ( x2 )  f ( x1 )
( x  x1 )
x2  x1
f ( x2 )
f ( x2 )  f ( x1 )
f (x )
f ( x)  f ( x1 )
f ( x1 )
x1
x
x2
線形補間の例
• 関数表から値を読み取る
X(度) sin(X)
0
0.0000
10
0.17365
20
0.34202
30
0.50000
40
0.64279
0.50000  0.34202
f (22 )  0.34202 
 (22  20)
30  20
 0.37362

真値
f (22 )  0.37461
(2)多項式補間
• 次のような補間多項式で近似できるものとする。
f ( x)  a0  a1 x  a2 x 2    an x n
連立方程式
1 x1

1 x2
1 x3

 
1 x
n 1

x12
x22
x32

xn21
 x1n  a0   f ( x1 ) 
  

 x2n   a1   f ( x2 ) 
 x3n  a2    f ( x3 ) 
  

       
 xnn1  an   f ( xn 1 )
を解いて a0 , a1 , a2 ,, an を求め
f ( x)  a0  a1 x  a2 x 2    an x n
で計算する。
放物線補間
(電卓で確かめてみよう)
a0  30a1  900a2  0.50000
a0  20a1  400a2  0.34202
a0  10a1  100a2  0.17365
10a1  500a2  0.15798
10a1  300a2  0.16837
X(度) sin(X)
0
0.0000
10
0.17365
20
0.34202
30
0.50000
40
0.64279
2a2  0.00005195
0.15798  500a2 0.15798  0.025975

 0.0183955
10
10
a0  0.17365  100a2  10a1  0.17365  0.005195  0.183955  0.00511
a1 
 0.00511  0.0183955  22  0.00005195  22 2  0.374447
真値 f (22 )  0.37461
線形補間の 0.37362 より真値に近い
VBAで多項式補間をやってみよう
Excelでデータ入力
VBAでのプログラム
①データ設定
Private Function データ設定()
N = 5: N1 = N + 1
ReDim A(N, N1)
N1 = N + 1
With Worksheets("Sheet1")
For i = 1 To N
X = Val(.Cells(i + 1, 1))
A(i, 1) = 1
For j = 2 To N
A(i, j) = A(i, j - 1) * X
Next
A(i, N1) = Val(.Cells(i + 1, 2))
Next i
End With
データ設定 = N
End Function
1

xi xi2  xin の設定
f ( xi ) の設定
VBAでのプログラム
②結果表示とボタンのクリックイベントハンドラ
Private Sub 結果表示(Y, N)
N1 = N + 1
With Worksheets("Sheet1")
.Cells(2, 4) = Y
For i = 1 To N
.Cells(i + 1, 6) = Right(Space(12) & Format(A(i, N1), "0.00000E+00"), 12)
Next i
End With
End Sub
Sub ボタン1_Click()
N = データ設定()
If N >= 2 Then
R = 掃出法(A, N, 0.000001)
X = Val(Worksheets("Sheet1").Cells(2, 3))
Y = 近似計算(X, N)
結果表示 Y, N
End If
End Sub
VBAでのプログラム
近似計算
Private Function 近似計算(X, N) As Double
N1 = N + 1: XX = 1: T = 0
For i = 1 To N
T = T + XX * A(i, N1)
XX = XX * X
Next i
近似計算 = T
End Function
課題1
以下の表は地表から垂直に打ち上げたロケットのデータである。
時間(sec)
速度(m/sec)
0
0.0000
60
0.0824
120
0.2747
180
0.6502
240
1.3851
300
3.2229
① 時間150secのときの速度を,線形補間で求めよ。
f (150)  f (120) 150  120
[ヒント]

f (180)  f (120)
180  120
② 時間150secのときの速度を,放物線補間で求めよ。
[ヒント]
a1  60 2  a2  60  a3  f (60)
a1 120 2  a2 120  a3  f (120)
a1 180 2  a2 180  a3  f (180)
なお,これらの補間はExcelの式として定義して求めよ。
課題2
以下のデータは,ある斜面の高さを100m間隔で測定した結果である。サンプルプ
ログラムを用いて,5次式補間により250m位置の高さを求めよ。
位置(m)
高さ(m)
0
185
100
186
200
188
300
190
400
191
500
192
素直に考えると以下のようになるが,先頭のデータが非常に大きくなるので,誤差が大きくなる。
したがって位置の単位に工夫が必要である。この工夫についても述べよ。
a1  05
 a2  0 4
 a3  03
 a4  0 2
a1 1005
 a2 100 4
 a3 1003
 a4 100 2
 a5  0
 a6
 a5 100  a6
 f (0)
 f (100)
a1  2005  a2  200 4  a3  2003  a4  200 2  a5  200  a6  f (200)
a1  3005  a2  300 4  a3  3003  a4  300 2  a5  300  a6  f (300)
a1  4005  a2  400 4  a3  4003  a4  400 2  a5  400  a6  f (400)
a1  5005  a2  500 4  a3  5003  a4  500 2  a5  500  a6  f (500)