Main Content

splinetool

スプライン近似法の実験

説明

splinetool によりスプライン ツールが開きます。このツールを使用すると、さまざまなスプライン近似法を実験することができます。このツールには、ワークスペースからデータをインポートするためのオプションなど、データに対する選択項目が用意されています。

splinetool(x,y) では指定されたデータ x および y (同じ長さのベクトルでなければなりません) をもつツールが開きます。

すべて折りたたむ

次のコードを実行してスプライン ツールを開き、ノイズを含むデータで実験を行います。

x = linspace(1,pi,101); 
y = cos(x)+(rand(size(x))-.5)/10;
splinetool(x,y)

この例では、3 次スプライン内挿で利用できるさまざまな端点条件をスプライン ツールで検証する方法を示します。

  1. コマンド ラインで「splinetool」と入力します。

  2. 最初の画面から [ユーザー独自のデータのインポート] を選択して、既定の関数を受け入れます。以下が表示されます。

    Spline Tool showing the cubic spline interpolant approximation with the not-a-knot end condition

    既定の近似は、節点なしの端点条件を使用した 3 次スプライン内挿です。

    データ サイトのベクトル xlinspace(0,2*pi,31) であり、その値は cos(x) です。これは、余弦関数が基礎関数として明示的に記録されている値のベクトル y を単に指定する場合と異なります。そのため、グラフ内に示される誤差は、指定された値に対する近似としてではなく、スプライン内の余弦に対する近似としての誤差です。結果として生じる誤差が端点付近で比較的大きくなっている (約 5e-5) ことに注意してください。

  3. 比較のために、以下の手順に従います。

    1. [近似のリスト][新規] をクリックします。

    2. [近似法] 内で、[端点条件] のリストから [complete] を選択します。

    3. 余弦関数の 1 階微分は正弦であるため、左端と右端の両方で 1 階微分の値を既知の値であるゼロに調整します。

    この手順を実行した結果、以下のように表示されます。右端の勾配がゼロ (丸めを除く) です。[最終結果] には、ツールで関数 csape を使用してスプラインが作成されたことが示されています。

    Spline tool showing a comparison of cubic spline interpolant approximation with the not-a-knot end condition and the complete end condition.

    誤差の改善はわずか約 5e-6 です。

  4. さらに比較するには、以下の手順に従います。

    1. [近似のリスト][新規] をクリックします。

    2. [近似法] 内で、[端点条件] のリストから [natural] を選択します。

    端点付近の近似が悪化していることに注目してください。誤差は約 2e-3 で、節点なしの端点条件を使用した場合よりも非常に悪化しています。

  5. 最終出力の比較を行うには、以下の手順に従います。

    1. [近似のリスト][新規] をクリックします。

    2. 余弦関数は周期的であるため、[近似法] 内で、[端点条件] のリストから [periodic] を選択します。

    誤差は約 5e-6 に戻り、特に [natural] 端点条件と比較した場合に近似が大幅に改善されたことに注意してください。

この例ではスプライン ツールで 3 次スプライン内挿と最小二乗近似を使用して、ドラッグ レース用の車の初期加速度の推定値を判断します。

  1. コマンド ラインで「splinetool」と入力するか、ツールが既に開いている場合は [ファイル]、[再起動] をクリックします。

  2. [リチャード タピアのドラッグ レースのデータ] を選択します。このデータは、ドラッグ レース用の車が移動した距離を時間の関数として示しています。メッセージ ウィンドウには、初期速度をゼロに設定することで初期加速度を推定するように求めるメッセージが表示されます。[OK] をクリックするか、スペース キーまたは "Enter" キーを使用して、メッセージ ウィンドウを消します。

  3. [近似法] 内で、[端点条件] のリストから [complete] を選択します。

  4. 左の端点の 1 階微分をゼロに変更することで、初期速度を調整します。

  5. 左の端点の 2 階微分の値によって指定された、初期加速度の値を検索します。左端のボタンをクリックすると、この端点の 1 階微分と 2 階微分を切り替えられます。2 階微分の値は、選択された単位で約 187 です。[表示]、[2 階微分の表示] を選択すると、結果がグラフィカルに表示されます。

  6. 比較のために、[新規] をクリックしてから、[近似法] として [最小二乗近似] を選択します。この手法では、端点条件を指定できません。代わりに、手法の次数を変更できます。初期加速度が 3 次内挿の値に近いことを検証します。

    この手順の結果は、以下のようになります。

    Spline Tool showing least-squares approximation of order 4 for Richard Tapia's drag race data

この例では、3 次スプラインによる最小二乗近似の絶対誤差がどこでも .04 を超えないよう 5 つの内部節点を置くようにしています。

  1. コマンド ラインで「splinetool」と入力するか、ツールが既に開いている場合は [ファイル]、[再起動] をクリックします。

  2. [チタン熱データ] を選択します。

  3. [近似法] として [最小二乗近似] を選択します。

  4. 内部節点が存在しないため、この選択によるデータの近似が十分でないことに注意してください。現在の節点を表示し、新しい節点を追加するには、[データ、ブレーク/節点、重み...] から [節点] を選択します。節点が [節点] にリストされ、データ グラフにも垂直線として表示されます。ちょうど 2 つの両端の節点があり、それぞれの多重度は 4 です。

  5. データ グラフを右クリックし、[節点の追加] を選択します。このオプションにより、マウスで動かせる十字形が表示されます。その正確な水平方向の位置が、節点のリストの下にある編集フィールドに表示されます。マウスをクリックすると、十字形の現在の位置に新しい節点が配置されます。可能な戦略の 1 つは、データ グラフの下の補助グラフに示されているように、最大絶対誤差の位置に節点を追加することです。

    Spline Tool showing the least square approximation for titanium heat data and the two end knots

    右クリックして [節点の複製] を選択すると、現在の節点の多重度が増加します。これは、[節点] 内に繰り返し出現することで反映されます。特定の節点を削除するには、まず節点のリストまたはデータ グラフのいずれかでその節点を選択してから、グラフ内を右クリックして [節点の削除] を選択します。

  6. 5 つの内部節点に相当する 6 つの多項式区分を使用して近似を選択することもできます。このオプションを指定するには、[データ、ブレーク/節点、重み...][# 個]6 を入力します。

  7. 5 つの内部節点ができたら、その節点を移動させることで誤差をさらに小さくすることを試みます。移動させる節点を選択するには、グラフ内の垂直線をクリックし、次に、[データ、ブレーク/節点、重み...][節点] の下にあるコントロールを使用し、節点の移動によって誤差がどのように変化するか確認します。編集フィールドを使用して、現在の節点の位置を上書きすることもできます。現在の節点シーケンスを再分布する "調整" 機能も試します。

  8. [近似のリスト][複製] を使用して、適切な節点の分布を後で使用できるように保存します。[名前の変更] を使用して、複製された近似の名前を lstsqr に変更します。元の近似に戻るには、[近似のリスト] でその名前をクリックします。

この例では、スプライン ツールを使用して平滑化スプラインの実験を行います。

  1. コマンド ラインで「splinetool」と入力するか、ツールが既に開いている場合は [ファイル]、[再起動] をクリックします。

  2. [チタン熱データ] を選択します。

  3. [近似法][平滑化スプライン] を選択します。

  4. [パラメーター] を 0 と 1 の間で変更します。これにより、近似が最小二乗直線近似から "自然な" 3 次スプライン内挿に変化します。

  5. [許容誤差] を 0 とそれより多少大きな値 (inf など) の間で変更します。近似が、考えられる最適な近似である "自然な" 3 次スプライン内挿から最小二乗直線近似に変化します。

  6. [パラメーター] の値を増やすか、[許容誤差] の値を減らすと、誤差が減少します。ただし、2 階微分のサイズで測定されているように、誤差が小さければ粗さが増加します。この結果を確認するには、[表示]、[2 階微分の表示] を選択し、[パラメーター][許容誤差] の値を再度変更します。

  7. 粗さの測定における重みを変更し、より正確ではあるが滑らかさに欠ける近似の作成をピーク領域で可能にし、ピーク領域から離れた位置ではより滑らかで正確性に欠ける近似を求めます。

    1. [データ、ブレーク/節点、重み...] から [粗さの重み内でのジャンプ] を選択します。

    2. [表示]、[2 階微分の表示] を選択します。

    3. データのピークの左側に対して任意のデータ点を選択します。

    4. 選択されたサイトにおけるジャンプを、その下にある編集フィールドで値を変更することで -1 に設定します。最初のサイト区間での粗さの重みは 1 であるため、強調表示されたサイトの右側に対する粗さの重みを 0 に設定しました。これに応じて、そのサイトの左側では 2 階微分が相対的に小さくなっています。

    5. データのピークの右側に対して任意のデータ点を選択します。

    6. 選択されたサイトをまたぐジャンプを 1 に設定します。強調表示されたサイトの左側に対する粗さの重みは 0 であるため、強調表示されたサイトの右側に対する粗さの重みを 1 に設定しました。これに応じて、そのサイトの右側では 2 階微分が相対的に小さくなっています。ピーク領域から離れると、全体的な効果は非常に滑らかですが近似の精度はあまり高くありません。一方、ピーク領域では、下の補助グラフに示すようにスプライン近似が大幅に改善されますが、2 階微分はかなり大きくなります。

      粗さの重みにジャンプが存在するサイトでは、対応するジャンプが 2 階微分に存在します。[パラメーター] の値を増やすと、ピーク領域全体での誤差は低下しますが、2 階微分は非常に大きいままです。ピーク領域を離れると、これとは反対のことが当てはまります。

      Spline Tool showing a smoothing spline of order 4 for the titanium heat data

入力引数

すべて折りたたむ

データ サイト。y と同じ長さのベクトルとして指定します。データ サイトは個別または順序付けする必要はありませんが、少なくとも 2 つの異なるサイトがなければなりません。

データ値。x と同じ長さのベクトルとして指定します。

ヒント

次の図には、3 次スプライン内挿と、余弦関数にノイズを加えて作成されたサンプル データ上の平滑化スプラインとを比較している、スプライン ツールが示されています。

Spline Tool showing a comparison of cubic spline interpolation and a smoothing spline on sample data created by adding noise to the cosine function

近似法の選択

ツールでサポートされる近似法およびオプションを以下に示します。

近似法

オプション

3 次内挿スプライン

端点条件の型と値を調整します。

平滑化スプライン

3 次 (次数 4) スプラインまたは 5 次 (次数 6) スプラインを選択します。許容誤差または平滑化パラメーター (あるいはその両方) の値を調整します。誤差と粗さ測定の重みを調整します。

最小二乗近似

次数を 1 から 14 の間で変更します。既定の次数は 4 で、3 次近似スプラインを返します。多項式区分の数を変更します。節点を追加および移動して近似を向上させます。誤差測定の重みを調整します。

スプライン内挿

次数を 2 から 14 の間で変更します。既定の次数は 4 で、3 次スプライン内挿を返します。指定されている既定の節点が不十分である場合は、それらを移動して近似を変更できます。

グラフのプロット

同じデータの複数の近似を生成し、比較できます。近似の 1 つは、太いラインの幅を使って常に "現在の" としてマークされます。次の表示を使用できます。

  • データ グラフ。次の内容が表示されます。

    • データ

    • [近似のリスト] に表示するために選択された近似

    • 現在の節点シーケンスまたは現在のブレーク シーケンス

  • 現在の近似の補助グラフ (表示される場合)。このグラフは、[表示] メニューのいずれかの項目を選択して表示することができます。以下のいずれかが表示されます。

    • 1 階微分

    • 2 階微分

    • 誤差

既定では、誤差は指定されたデータ値とデータ サイトの近似値との差を表します。特に、近似が内挿の場合、誤差はゼロ (丸めを除く) になります。ただし、関数を指定してデータ値を指定すると、表示される誤差は関数と現在の近似との差になります。これは、データ グラフの y ラベルを関数の名前に変更した場合も行われます。

メニュー オプションの試行

[ファイル] > [Figure に出力] メニューで、グラフに注釈を付けたり、印刷することができます。

[ファイル] > [データのエクスポート][ファイル] > [スプラインのエクスポート] メニューをそれぞれ使用して、データと近似をワークスペースにエクスポートし、さらに使用または解析できます。

[ファイル] > [コード生成] メニューで、元のデータ、現在表示されているいずれかのグラフまたはすべてのグラフから、生成に使用できる関数ファイルを作成できます。このファイルでは、現在のグラフの生成に使用されるコマンドの書き込みレコードも提供されます。

さらに実験する前に、[複製] ボタンを使用して、現在の近似を保存できます。この保存した近似を後でクリックすると、ツールによって、保存された近似の作成に使用されたデータを含むすべてのデータが以前のまま復元されます。この保存した近似は、他の近似で作業している間にデータを編集した場合でも保持されます。

グラフ内を右クリックするか、[編集] メニューの適切な項目を選択することで、データ、節点、ブレークを追加、削除または移動することができます。

[ツール] メニューを使用して、グラフ内のグリッドまたは凡例を切り替えることができます。

バージョン履歴

R2006a より前に導入