藍上雄のガラクタ箱

補間(後)

 補間(前)の続きです。スプライン関数(Spline fanction)について、もう少し具体的に、書いてみようと思います。

 データ間をつなぐ、曲線を示すのに、其都度、式を作り変えていたのでは、あまりにも不合理です。そこで考え出されるのは、基底関数を作る・多項式の係数を変数として式を変化させる・式の平行移動・等色々な手法が考えられています。

 基底関数を作る:カーディナルスプラインで利用される手法です。基底には、4次又は6次の多項式の中心部を切り取って使用しています。(ちょうど三角関数の1周期分と似たものです。)その関数は、0以上1以下の範囲に収まるように設定され、補完する節点の数だけ基底が用意されます。1本の基底関数を例に取ってみると、{0・0・0・1・0・0・0・0・0・0}をつなぐ、直線距離1の曲線(0・0の間も曲線で示されます。)が示されます。データパッケージ化する事ができるので、補間する節点の数値は、正確に反映されます。あまり節点の値が大きくなりすぎると、曲線のふくらみも大きくなるので、節点数値の標準化(平均値を0として使用する)等の工夫が必要と成ります。

 多項式の係数を変数として式を変化させる:3次の多項式 y(x)=ax^3+bx^2+cx+d ・・・@は、点ξ1(0.1)・点ξ2(e.0)を通り、この多項式y(x)の接線の傾きは、y'(x)=3ax^2+2bx+c で示されるので、点ξ1での接線の傾きは、y'(0)=α1とすると c=α・d=1次に、点ξ2においても同様にして y(e)=ae^3+be^2+α1e+1=0 は ae^3+be^2=-α1e-1となる。次に点ξ2での接線の傾きは、y'(e)=3ae^2+2be+α11として 3ae^3+2be~2=β1e-α1e と成るので、消去法を用いて、a=(β1e+α1e+2)/(e^3) 更に、b=-(2α1e+β1e+3)/(e^2) と成るので、@の式は、y(x)={(β1e+α1e+2)/(e^3)}x^3+{(2α1e+β1e+3)/(e^2)}x^2+α1x+1 ・・・Aとなります。 次に、点ξ3(0.0)・点ξ4(e.1)を通る@の式について考えます。前記と同じようにして、解くと,c=α・d=0・a=(β2e+α2e-2)/(e^3)・b=(2α2e+β2e-3)/(e^2)と成ります。y(x)={(β2e+α2e-2)/(e^3)}x^3+{(3-2α2e-β2e)/(e^2))}x^2+α2x+1 ・・・B もう少し普遍的に書いてみると、AとBの多項式が、とりあえず基底と成ります。

 ξ0(x0.y1)・ξ1(x1.y1)・・・ξi(xi.yi)・・・・ξn(xn.yn)・ξn+1(xn+1.yn) 節点は1〜nまでですが、両側に節点を重複させる。節点ξi(xi.yi)とξi+1(xi+1.yi+1)を補間する事を考えてみます。yA(x)={(βie+αie+2)/(e^3)}x^3+{(2αie+βie+3)/(e^2)}x^2+αix+1 ・・・A e=xi+1-xi・αi={(yi-yi-1)/(xi-xi-1)+(yi+1-yi)/(xi+1-xi)}/(2yi)・βi={(yi+2-yi+1)/(xi+2-xi+1)+(yi+1-yi)/(xi+1-xi)}/(2yi+1)・x=x-xiとしてAの式を構成します。yB(x)={(βi+1e+αi+1e-2)/(e^3)}x^3+{(3-2αi+1e-βi+1e)/(e^2))}x^2+αi+1x+1 ・・・Bの式についても同様にして、構成すると、補間関数はf(x)=yiA(x)+yi+1B(x)と成ります。(βi+1i・αi+1iとした方が都合が良い) 後は、同じ要領で順々に節点をつないでゆきます。

 前記で平行移動についても、記述してあるので省略させていただきます。スプライン関数は、かなり自由に曲線をデザインできるので、興味のある方は、工夫してみてください。