Web教材一覧>
数値解析
(BOK大区分:1 基礎理論、中区分:2 アルゴリズムとプログラミング、中区分:2 アルゴリズム)
補間に関する基本概念は「補間」を参照してください。
そこで紹介したラグランジュの補間公式やニュートンの補間公式は、与えられたn+1の点を通る唯一のn次式を求めることがポイントでした。そのため、次数が高くなると、極端な補間値になってしまうことがあります。
スプライン補間は、n+1個の点 (x0,y0), (x1,y1), … , (xn,yn) を、2つの点の区間 [xj~xj+1]ごとに別々の式(一般には3次式)Sj(x) を設定して緩やかな曲線にし、極端な補間値にならないようにする補間法です。計算はかなり複雑になります。
区間 [xj~xj+1] における3次式を
Sj=aj(x-xj)3 + bj(x-xj)2 + cj(x-xj) + dj (j=0~n-1)
とします。
これらの3次式が滑らかにつながっている必要があります。それで、xj におけるSj-1とSjの1次導関数(傾き)S(1) と2次導関数(滑らかさ)S(2) の値が等しいという条件を加えます。さらに、始点 x0 と終点 xn での2次導関数の値が0であるとの仮定をします。
決定すべき件数 aj, bj, cj, dj の個数は4n個です。
それに対して、上の条件を満たす方程式は、次の4n個になりますので、連立方程式を解くことにより、各係数の値を決定することができます。
上の関係に、xj, yj の値を代入して連立方程式にすればよいのでが、複雑なので、次のように変形して解く方法がとられます。この変形過程はここでの目的ではないので、結果だけを示します。
uj=2bj (j=1~n-1)
(u0=0, un=0 とする)
hj=xj+1 - xj (j=0~n-1)
vj=6( (yj+1-yj)/hj - (yj-yj-1)/hj-1) (j=1~n-1)
と置換すると、uj を求める連立方程式は、次のようになります。変数側の要素がすべてxの差の1次式になっていること、対角線とその両側にだけ値を持つ(それ以外は0)である特徴があります。
u1 u2 u3 … uj-1 uj uj+1 … un-2 un-1
2(h0+h1) h1 = v1
h1 2(h1+h2) h2 = v2
h2 2(h2+h3) h3 = v3
::: :
hj-1 2(hj-1+hj) hj = vj
::: :
hn-2 2(hn-2+hn-1) = vn-1
条件Aより、dj=yj は直ちに求められます。
連立方程式を解いて、ujが求まれば、
bj=(1/2)*uj で計算できます。
cjは、かなりの式操作がありますが、
cj=(yj+1-yj)/(xj+1-xj) - (1/6)*(2uj+uj+1)*(xj+1-xj)
から計算できます。
aj は、条件Dから
6aj(xj+1-xj) + 2bj=2bj+1
∴ aj=(1/6)*(uj+1-uj)/(xj+1-xj)
から計算できます。
次の6点(n=5)(このページの先頭にあるグラフの赤点)を入力とする補間式を考えます。
j 0 1 2 3 4 5
xj 0 2 3 5 7 8
yj 4 2 6 8 6 8
hj=xj+1-xj, vj=6( (yj+1-yj)/hj - (yj-yj-1)/hj-1) を計算して付け加えます。
hj 2 1 2 2 1
vj 30 -18 -12 18
これより、左の連立方程式が作られ、右の解が得られます。
u1 u2 u3 u4 解
6 1 = 30 u1= 5.5702
1 6 2 =-18 u2=-3.4212
2 8 2 =-12 u3=-1.5215
2 6 = 18 u4= 3.5072
次の逆変換により、係数 aj, bj, cj, dj が得られます。
aj=(1/6)*(uj+1-uj)/(xj+1-xj)
bj=(1/2)*uj
cj=(yj+1-yj)/(xj+1-xj) - (1/6)*(2uj+uj+1)*(xj+1-xj)
dj=yj
その結果、区間ごとの補間式は次のようになります。
j 区間 aj bj cj dj
0 0~2: 0.4642(x-0)3 +0 (x-0)2 -2.853(x-0) + 4
1 2~3: -1.4990(x-2)3 +2.785(x-2)2 +2.713(x-2) + 2
2 3~5: 0.1583(x-3)3 -1.711(x-3)2 +3.788(x-3) + 6
3 5~7: 0.4191(x-5)3 -0.761(x-5)2 -1.155(x-5) + 8
4 7~8: -0.5845(x-7)3 +1.754(x-7)2 +0.833(x-7) + 6
これらをつなぐと上のグラフの曲線になり、赤点近傍で滑らかに接続しています。
この補間式で、x=1, 4, 6 のときの y を計算すると次のようになり、グラフの◇の点になります。
x=1: 0.4642(1-0)3 +0 (1-0)2 -2.853(1-0) + 4= 1.607
x=4: 0.1583(4-3)3 -1.711(4-3)2 +3.788(4-3) + 6= 8.236
x=6: 0.4191(6-5)3 -0.761(6-5)2 -1.155(6-5) + 8= 6.504