XからYを補間/補外

Video Image.png 関連する動画はこちら:Origin VT-0010 Interpolation

概要

InterpolateYFromX 1.png
補間は、既知の離散データから新しいデータポイントを計算し、作成する方法です。Xベクトルデータを与えると、この機能は入力曲線(XY範囲)を元にYベクトルデータを補間します。Originには、データ補間のために次の4つの手法が用意されています。線形3次スプライン3次B-スプラインAkimaスプライン

線形補間 は、最も単純で高速な補間法です。線形補間では、2つの隣接するデータポイントの算術平均が計算されます。この方法は、精度が低くても構わない場合に役立ちます。また線形補間は、計算に時間がかからないので、大きなデータセットの場合にも役立ちます。

線形補間の一般形は、多項式補間です。多項式補間は、線形補間よりも多くの計算パワーが必要で、多項式の次数が高いとフィットデータの振れも広がります。これらのデメリットは、多項式フィットやスプライン補間を使って避けることができます。

3次スプライン法は3次多項式を使用し、区分法の要領でデータフィットを実行します。スプライン補間は線形補間よりも誤差が少なくなり、補間曲線も滑らかになります。

3次スプライン同様、3次B-スプライン補間もデータ範囲を区分けしてデータフィットしますが、これは3次ベジェスプラインを使って、データを近似します。3次B-スプラインは、幾何学の汎用的な正確なモデルとなります。

XからYを補間するには、
  1. データの入った新しいワークシートを作成します。
  2. 目的のデータを選択します。
  3. メニューから、解析:数学:補間/補外(XからYを検索)を選択します。これにより interp1 ダイアログが開きます。

interp1 Xファンクションが呼び出されて計算を実行します。

Note:均一で等間隔な補間曲線を生成するには、補間/補外のメニューコマンドを使用します。

ダイアログオプション

再計算

分析結果の再計算の設定を変更します。

  • なし
  • 自動
  • 手動

詳細情報は、 分析結果の再計算をご覧下さい。

補間するX値

補間を行うX列

入力

指定されたX列からYを補間するための参照XY列。複数のXY列を選択できます。複数のXYが選択されている場合、XYの各セットが同じX列を補間するための参照として使用され、対応するY列と係数値が出力されます。

範囲の設定に関する詳細は、入力データを指定するをご覧ください。

手法

補間手法を指定します。

  • 線形
    線形補間は、隣接する2つのデータポイント間に線を作成することにより、データポイントを推定する高速な方法です。結果のポイントは、欠損値データに対してはあまり正確ではありません。
  • 3次スプライン
    入力データを指定された数に分割し、各セグメントを3次多項式で近似します。各3次関数の2次導関数はゼロに等しく設定されます。これらの境界条件が満たされると、関数全体は区分的に構成できます。
  • 3次B-スプライン
    この方法も入力データを分割し、各セグメントに対して、ベジェスプラインでフィットします。
  • Akimaスプライン
    この方法は複数の多項式から作成された区分関数を元にしています。akima補間は外れ値がある場合も出力が安定しています。
補外オプション

補間するX値 で指定されたデータ範囲の一部が、入力で指定されたX範囲の外側にあるとき、これらの結果のY値は補外から計算されるため、この範囲部分は補外範囲として考慮されます。このオプションは、対応するY値をどのように補外するか指定するために使用します。

  • 補外
    最後の2点を使用してYを補外します。
  • 欠損値をセット
    補外範囲内のY値を欠損値としてセットします。
  • 最終の値を繰り返す
    補外範囲内のすべての値のX値から最も近い入力XのY値を使用します。
境界

境界条件は3次スプラインでのみ利用できます。

  • 自然
    2次導関数は両端で0です。
  • Not-A-Knot条件
    2階微分および2階微分の最後のポイントで3階微分が連続
スムージング因子

スムージング因子は3次B-スプラインでのみ利用できます。

補間の結果

補間されたY値を出力するY列。

係数

スプラインまたはBスプライン法を使うときのスプライン係数を出力するかどうか、およびそれらをどの列に表示するか。

アルゴリズム

異なる対の数列データ (x_i\,y_i\,)が与えられています。ここでi= 0, 1, ... n-1\!です。次の方法で、x\!での補間したy\!を探します。

1. 線形補間 (interp1q)

この場合、x<x_{0,}y=y_0+\frac{y_1-y_0}{x_1-x_0}\times (x-x_0)となります。

この場合、x>x_{n-1,}y=y_{n-1}+\frac{y_{n-1}-y_{n-2}}{x_{n-1}-x_{n-2}}\times (x-x_{n-1})となります。

この場合、x_i<x<x_{i+1,}y=y_i+\frac{(y_{i+1}-y_{i)}}{(x_{i+1}-x_{i)}}\times (x-x_i)となります。

2. 3次スプライン (spline)

Originは、自然3次スプラインを用いて補間します。

y=Ay_i+By_{i+1}+Cy_i^{''}+Dy_{i+1}^{''}

ここで、

A\equiv \frac{x_{i+1}-x}{x_{i+1}-x_i},B\equiv 1-A,C\equiv \frac 16\left( A^3-A\right) \left( x_{i+1}-x_i\right) ^2,D\equiv \frac 16(B^3-B)(x_{i+1}-x_i)^2

そして、y_i^{''}が次から生成されます。

\frac{x_i-x_{i-1}}6y_{i-1}+\frac{x_{i+1}-x_{i-1}}3y_i+\frac{x_{i+1}-x_i}6y_{i+1}=\frac{y_{i+1}-y_i}{x_{i+1}-x_i}-\frac{y_i-y_{i-1}}{x_i-x_{i-1}}

境界点において、y_o^{''}y_{n-1}^{''}を0にセットします。

3. 3次B-スプライン (bspline)

x<x_0\! またはx>x_{n-1}\!に対して線形補間を実行します。

この場合、x_0<x<x_{n-1},y=\sum_{i=1}^{n-4} c_iN_i(x)となります。

ここで、N(x)\!は、結節点 x_i\,, x_i+1\,, ..., x_i+4\,, で定義される規格化した3次Bスプラインを表し、 c_i\,は、対応する関数の係数を表します。

この結節点の合計数n\!x_1\,, ..., x_n\, は、関数によって自動的に選ばれます。結節点 x_5\,, ..., x_n-4\, は、内部の結節点です。これらは近似区間 [x_1\,, x_m\,] をn-7\!個のサブ区間に分けます。係数 c_1\,, c_2\,, ..., c_n-4\, は、次の制約最小化問題の解として決められます。

最小化

\eta =\sum_{i=5}^{n-4}\delta _i^2\,

制約の主要因

\theta =\sum_{r=1}^m\varepsilon _r^2\leq S\,

ここで、\delta _i\,は内部結節点 y\!における\varepsilon _r\,の3階微分で不連続な飛び越えを表し、 x_i\, は、重み付けされた残差 w_r (y_r-y(x_r))\,、Sはユーザが指定した非負の数です。

\eta\,は、y\!の滑らかさ(の欠落)の計測値と見ることができ、フィットの近さは、 \theta\,を通して測定されます。滑らかさの係数、パラメータS\!によって、ユーザは(通常、競合している)2つのプロパティ間のバランスを制御します。S\!が大きすぎる場合、スプラインは滑らかすぎ、信号は失われます(アンダーフィット)。S\!が小さすぎる場合、スプラインは多くのノイズを検出します(オーバーフィット)。極端な場合として、関数は、S\!がゼロにセットされている場合、補間スプライン(\theta\,,=0)を返し、S\!が非常に大きい場合、重み付けした最小二乗3次多項式(\eta\,,=0)を返します。これら2つの極値の間のS\!値を試すことは、妥協できる結果となります。

4.Akimaスプライン (akima)

Akima補間は、複数の多項式(最大で3次式まで)から作成された区分関数を元にしています。この区分関数はあるXY座標で示された区間の間、順に適用されます。特定の位置での入力データプロットの傾きは4つの隣り合う点とその点そのもののXY座標で推計されます。特定の2つの点の傾きと座標から。3項式が計算され、2つの点の間の曲線が計算されます。そして補間はこのような多項式の組み合わせによって続けられます。多項式の終点を計算する時に追加の推定が行われます。

まず、指定の位置の曲線tが計算されます。特定のポイント(ポイント3)では、5つのデータポイント1,2,3,4,5があり、m_{1}, m_{2}, m_{3}, m_{4}はそれぞれ\bar{12}, \bar{23}, \bar{34}, \bar{45}の線分の傾きで、m_i=(y_{i+1}-y_i)/(x_{i+1}-x_i)が成り立ちます。曲線の傾きtは、条件によって以下の数式が成り立ち、それで決定されます。

m_{1}\neq m_{2}またはm_{3}\neq m_{4}の場合、

t = \left ( \left | m_{4} - m_{3} \right |m_{2} + \left | m_{2} - m_{1} \right |m_{3} \right  )/\left ( \left | m_{4} - m_{3} \right | + \left | m_{2} - m_{1} \right |\right  )

m_{1} = m_{2}またはm_{3} = m_{4}の場合、

 t = \frac{(x_4-x_3)m_2 + (x_3-x_2)m_3}{x_4-x_2}

2つの終点に対する傾きは各曲線の最後に推定されます。そして推定するには、その傾きを隣にある3点を使用して2次曲線で補間します。つまり、1つ目の傾きは最初の3点から2次曲線で補間し、その補間曲線の微分を取ると最初の点の傾きを計算できます。

そして2つの隣り合ったデータポイント\left ( x_i, y_i \right )\left ( x_{i+1}, y_{i+1} \right )の間にある区間[x_i, x_{i+1}]に対する多項式は次の条件で決定します。

y|_{x=x_i} = y_i
y'|_{x=x_i}=t_i
y|_{x=x_{i+1}} = y_{i+1}
y'|_{x=x_{i+1}}=t_{i+1}

ここで、t_it_{i+1}はこれら2点の傾きです。

参考文献

1. Michelle Schatzman.Numerical Analysis: A Mathematical Introduction, Chapters 4 and 6.Clarendon Press, Oxford (2002).

2. William H. Press, etc. Numerical Recipes in C++.2nd Edition.Cambridge University Press (2002).

3. Nag C 関数ライブラリ ドキュメント, nag_1d_spline_fit (e02bec).

4. Hiroshi Akima, Journal of the Association for Computing Machinery, Vol. 17, No. 4, (1970)