|
NumericalMath`SplineFit`
曲線をデータにフィットするためのほとんどの方法は,フィットが一対一対応であると想定している.つまり, の1つの値に対して の値は1つしかないと仮定しているのである.データによっては平面上に一般的な曲線を求めたい場合もあるだろう.しかしそれは通常は難しい問題である.そのため,区間ごとのフィットを行うアプローチが有効になる.これは通常スプラインと呼ばれる.しかし,スプラインがすべて点を補間するわけではないので注意が必要である.スプラインによってはBezierスプラインを用いて凸包を指定するように,点のサブセットを使って曲線の形を制御するものもある.

スプラインの生成
SplineFitルーチンは現在Cubic,Bezier,CompositeBezierの3タイプのスプラインをサポートしている.現在実装されている3次(cubic)スプラインは, 連続形の区分的な3次多項式から成っている.ここで多項式の2次導関数は終点においてゼロである.この曲線は曲線が作られた各点を補間する.
一方Bezierスプラインは終点のみを補間する.他の点は凸包を形成してスプラインを制御する.
最後に複合(composite)Bezierスプラインは, 連続形の一連の3次Bezier曲線からなっている.これは補間点を変更し,点を制御する.
SplineFitは区分的なスプラインを表すSplineFunctionオブジェクトを返す.これは平面上のスプライン曲線を表す引数が1つのパラメータ的な関数である.パラメータ表示における領域内の1つの数値的引数をこれに与えることで,その点の ペアを評価する.
パッケージをロードする.
In[1]:= <<NumericalMath`SplineFit`
次は点のリストである.
In[2]:= pts = {{0,0},{1,2},{-1,3},{0,1},{3,0}};
これはptsから3次スプライン曲線を生成する.
In[3]:= spline = SplineFit[pts, Cubic]
Out[3]= 
曲線のどの点でも関数を評価することができる.
In[4]:= spline[1.4]
Out[4]= 
次は曲線のグラフである.
In[5]:= ParametricPlot[spline[u], {u, 0, 4}, PlotRange -> All, Compiled -> False]

Out[5]= 

SplineFitが返すオブジェクト
SplineFitが返すスプライン関数オブジェクトはスプラインのタイプと関数を適用することができるパラメータの有効な範囲を示している.内部引数はスプラインのタイプによって異なり,標準の出力形式では隠される.例えば3次スプラインでは,これらの内部引数がスプラインを作る多項式の係数をキャッシュする.
次はptsから生成された3次スプライン関数の内部形式である.
In[6]:= InputForm[spline]
Out[6]//InputForm= SplineFunction[Cubic, {0., 4.}, {{0, 0}, {1, 2}, {-1, 3}, {0, 1}, {3, 0}}, {{{0, 111/56, 0, -55/56}, {0, 57/28, 0, -1/28}}, {{1, -27/28, -165/56, 107/56}, {2, 27/14, -3/28, -23/28}}, {{-1, -9/8, 39/14, -37/56}, {3, -3/4, -18/7, 37/28}}, {{0, 69/28, 45/56, -15/56}, {1, -27/14, 39/28, -13/28}}}]
|