補間入門

何年も前に、NumXL はユーザーのモデリングニーズに応えるためのユーティリティあるいはヘルパーメソッドとして補間機能をサポートしました。驚いたことに、この機能は非常に注目されており、私たちはこの機能に関するよくある質問をここにまとめることにしました。

What is Interpolation?

補間は、離散的な数の既知のデータ点の範囲に基づいて、新しいデータ点の値を推定する数値手法である。

例を挙げて説明します。関数 $y=f(x)$ の値が、以下の図に示すように、5つの異なる $x$ 値の集合として与えられているものと仮定します。
このグラフは、5つの異なるx値からなる入力データセットを示している。

現在、与えられた5つのデータ点を使用して、関数の値を$x=5$で推定(すなわち補間)したいと考えています。

補間処理を行うためには、目標とするx値は元のデータセットの範囲内にある必要があります(例:$2\le x\le 12$)。

その前に、私たちがよく耳にするいくつかの基本的な質問に答えよう:

  1. 外挿についてはどうだろう?どう違うのですか?
    外挿は、与えられたデータセットの範囲外にあるx値の関数値を推定するプロセスである。
  2. NumXLは外挿をサポートしていますか?
    はい、同じ機能です NxINTRPL(.) は外挿に使用できる。extrapolate "引数には必ず "true "または "1 "を渡すこと。
  3. カーブフィット(回帰など)と補間は同じですか?
    カーブ・フィットと補間はしばしば同じ意味で使われるが、両者には微妙な違いがある。補間はデータ点に正確にフィットしなければならないのに対し、カーブ・フィットは可能な限り近づけなければならない。
  4. 補間を使うべきか、カーブフィッティングを使うべきか?
    それは場合による。補間は、データ点が完全に(あるいは少なくとも非常に高い精度で)わかっていることを前提としているのに対し、カーブフィッティングはデータ点にある程度のノイズがあることを前提としている。

データ準備

先に述べたように、すべての補間法は既知のデータ点の離散集合を受け入れる。実世界のデータセットを扱うために、NumXL の補間関数 (NxINTRPL) という前処理を行う:

  • データポイントを昇順(Xを基準)にソートする。
  • 欠損値のあるデータポイントを静かに削除する。
  • 同じX値に対する複数の測定値をその平均値に置き換える。

よくある質問

Q: データポイントは一様に区切るべきか?

A: いいえ、データポイント間の間隔は均一である必要はありませんが、補間精度を向上させ、外れ値の影響を最小限に抑えるために、データポイントをx範囲に分散させることをお勧めします。

補間法

  1. ステップ補間1:前方フラット補間:

    ステップ補間法は、既知のデータ点間で未知の関数を平坦/一定にモデル化し、最後に既知の値を使用します。
    このグラフは「フォワード・フラット」補間法を示している。

  2. ステップ補間2:後方フラット補間:

    バックワードフラット法の場合、未知関数も既知のデータポイント間でフラット/定数としてモデル化されるが、直後のデータポイントのレベルを使用する。
    このグラフは「バックワードフラット」補間法を示している。

  3. ステップ補間3:最近傍補間:

    最近傍法では、未知関数は依然として平坦/一定にモデル化されるが、そのレベルは最も近いデータポイントのレベルによって決定される。
    このグラフは「ニアレストネイバー」補間法を示している。

  4. 線形補間:

    線形補間では、各データ点とその近傍を直線で結ぶ。
    このグラフは「線形」補間法を示している。

    2つのデータポイント間の関数の値は、その2つのデータポイントによってのみ決定されることに注意してください。

  5. キュービックスプライン: 自然スプライン:

    次スプライン法を用いて、与えられたデータ点における1次導関数と2次導関数が一致するように、各区間上でピースワイズ3次多項式を構築する。2次導関数は、最初の点と最後の点でゼロになるように選ぶ。
    このグラフは「自然スプライン」補間法を示している。

    つまり、関数が大きく変化した場合(たとえばx=4)、周囲の点のカーブは「ぐらぐら」する(つまり、中間点でオーバーシュートする)。

  6. キュービックスプライン: AKIMA スプライン:

    自然な3次スプラインのふらついた曲線を避けるために、データ点(ノット)周辺の2次導関数の連続性を緩和し、その結果、角が丸くならないようにしている。
    このグラフは「AKIMAスプライン」補間法を示している。

    上の図に示すように、データポイント付近の曲線は連続しているが、滑らかではない。

  7. キュービックスプライン ステフェン スプライン

    シュテフェンのスプラインは、3次スプラインのセグメントがデータポイント間で単調であるという新しい制約を加える。ふらつきはない。
    このグラフは「ステフェン・スプライン」補間法を示している。

    結果として得られる曲線は、データ点の周囲が滑らかで、データ点間の揺れは見られない。従って、極小値と極大値はデータ点でのみ正確に発生します。

    ステフェンのスプラインとその1次導関数は連続であることが保証されているが、2次導関数は不連続である可能性がある。

  8. 立方スプライン 拘束(クルーガー)スプライン:

    クルーガーは、滑らかさを犠牲にすることでオーバーシュートを防ぐために、制約付き3次スプラインを提案した。これにより、すべての点で連続的な2次導関数を必要としなくなり、周囲の点を使って1次導関数の値を数値計算するようになった。
    このグラフは、「制約付き(クルーガー)スプライン」補間法を示している。

    制約付き(クルーガー)スプラインを使用することで、3次スプラインのオーバーシュートによるふらつきを回避し、単調性制約を追加する必要がなくなった。

三次スプラインには他にも種類があるが、NumXL バージョン 1.68 で現在サポートされているものだけを紹介した。

よくある質問

Q: どのタイプのキュービックスプラインを使うべきか?

A: データの性質や、滑らかな曲線やオーバーシュートの副作用の重要性によります。多くの場合、安全策として制約付き(Kruger)3次スプラインを選択することをお勧めします。

Q: NumXLには2つの補間関数がありますね: INTERPOLATE(.) そして NxINTRPL(.). どちらを使うべきですか?

A: INTERPOLATE(.)関数は初期の実装関数でしたが、現在は非推奨となっています。上記の補間メソッドはすべて NxINTRPL(.) でのみ使用可能なので、この関数のみを使用する必要があります。

Q: NxINTRPL(.)関数は、ターゲット引数に単一の値も配列も受け付ける。なぜですか?

A: NxINTRPL(.)は、各値について個別に呼び出すよりも、複数の値について一度に補間した方が高速に実行されます。数回の関数呼び出しですべてのx値を渡すことを推奨する。

  添付ファイル

コメント

サインインしてコメントを残してください。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています