Main Content

関数値の近似方法

関数値の近似について

テーブル ルックアップ演算の第 2 段階では、提供された入力に対応する出力を生成します。入力がブレークポイント ベクトルで指定されたインデックス値に一致する場合、ブロックは対応する値を出力します。ただし、入力がブレークポイント ベクトルのインデックス値と一致しない場合、Simulink® は出力を推定します。ブロック パラメーターのダイアログ ボックスで、この状況の出力の計算方法を指定することができます。使用可能なルックアップ方法については、次の各節で説明します。

内挿法

入力がブレークポイント値の間に来た場合、ブロックは隣接するブレークポイントを使って出力値を内挿します。ほとんどのルックアップ テーブル ブロックでは、次の内挿法を使用できます。

  • フラット — 内挿を無効にし、[入力の下の値を使用] という丸め演算を使用します。詳細については、丸め手法を参照してください。

  • 最も近い正の整数方向 — 内挿を無効にし、入力に最も近いブレークポイントに対応するテーブル値を返します。入力が隣接する 2 つのブレークポイントから等間隔にある場合、インデックスの大きいブレークポイントが選択されます。

  • 線形の点と勾配 — 隣接するブレークポイント間で直線を近似させ、入力に対応する直線上の点を返します。これが線形の点と勾配の方程式です。ここで、x は入力データ、y は出力デーブル データ (xi,yi はテーブル データの座標)、f は小数部です。xi,yi の詳細については、ルックアップ テーブル ブロックについてを参照してください。

    f=xxixi+1xi

    y=yi+f(yi+1yi)

  • 3 次スプライン — 3 次スプラインを隣接するブレークポイントに近似させ、そのスプライン上の入力に対応する点を返します。

  • 線形ラグランジュ — 1 次ラグランジュ内挿を使用して隣接するブレークポイント間で直線を近似させ、入力に対応する直線上の点を返します。これが線形ラグランジュの方程式です。ここで、x は入力データ、y は出力デーブル データ、f は小数部です。f は 0 ~ 1 未満の範囲 ([0,1)) に制約されます。x と y の詳細については、ルックアップ テーブル ブロックについて を参照してください。

    f=xxixi+1xi

    y=(1f)yi+fyi+1

    外挿法が [線形] の場合、外挿値は選択された線形内挿法に基づいて計算されます。たとえば、内挿法が線形ラグランジュの場合、外挿法は線形ラグランジュ方程式を継承して外挿された値を計算します。

  • Akima スプライン — Akima スプラインを隣接するブレークポイントに近似させ、そのスプライン上の入力に対応する点を返します。内挿法は、[Akima スプライン] 外挿法と併用する場合にのみ機能します。修正 Akima 3 次エルミート内挿法には次の特徴があります。

    • 生成されるうねりが 3 次スプラインよりも少ない。

    • リアルタイム アプリケーションにとっては 3 次スプラインよりも効率的である。

    • 3 次スプラインとは異なり、オーバーシュートが生成されない。

    • 3 次スプラインとは異なり、非スカラー信号をサポートする。

メモ

Lookup Table Dynamic ブロックでは、内挿法を選択できません。ブロック パラメーターのダイアログ ボックスの [ルックアップ手法] フィールドの [内挿 - 外挿] オプションで線形内挿が実行されます。

各内挿法には、計算時間と結果の平滑化の間にトレードオフがあります。丸めは最も高速ですが、滑らかさでは最も劣ります。線形内挿の方が丸めより時間がかかりますが、勾配が変化するブレークポイントを除き、より平滑な結果が得られます。3 次スプライン内挿は最も時間がかかる方法ですが、結果の平滑さは優れています。結果の平滑さが最も優れているのは Akima スプラインです。

外挿法

入力がブレークポイント ベクトルの範囲外にある場合、ブロックはブレークポイント ベクトルの最後の値の組から出力値を外挿します。ほとんどのルックアップ テーブル ブロックでは、次の外挿法を使用できます。

  • クリップ - 外挿を無効にし、ブレークポイント ベクトル範囲の最後に対応するテーブル データを返します。範囲外の値に対しては保護されません。

  • 線形 — 内挿法が [線形] の場合、この外挿法は入力が最初のブレークポイントより小さいか、最後のブレークポイントより大きいかによって、最初または最後のブレークポイントの組の間で線を近似させます。内挿法が [3 次スプライン] または [Akima スプライン] の場合、この外挿法は入力が最初のブレークポイントより小さいか、最後のブレークポイントより大きいかによって、最初または最後のブレークポイントにおける内挿の勾配を使用して線形表面を近似させます。この外挿法は、生成された線形表面上の入力に対応する点を返します。

    外挿法が [線形] の場合、外挿値は選択された線形内挿法に基づいて計算されます。たとえば、内挿法が線形ラグランジュの場合、外挿法は線形ラグランジュ方程式を継承して外挿された値を計算します。

  • 3 次スプライン — 入力が最初のブレークポイントより少ないか、最後のブレークポイントより大きいかによって、ブレークポイントの最初、または最後の組み合わせに 3 次スプラインを近似させます。この手法では、入力に対応するそのスプライン上の点が返されます。

  • Akima スプライン — 入力が最初のブレークポイントより小さいか、最後のブレークポイントより大きいかによって、ブレークポイントの最初、または最後の組み合わせに Akima スプラインを近似させます。この手法では、入力に対応するそのスプライン上の点が返されます。

メモ

Lookup Table Dynamic ブロックでは、外挿手法を選択できません。ブロック パラメーターのダイアログ ボックスの [ルックアップ手法] フィールドの [内挿 - 外挿] オプションで線形外挿が実行されます。

これらの手法以外にも n-D Lookup Table ブロックなどのルックアップ テーブル ブロックを使用すると、外挿が必要な状況が生じたときに実行するアクションを選択できます。たとえば、ルックアップ テーブルの入力がブレークポイント ベクトルの範囲外にあるときに Simulink で警告またはエラーを生成するように指定することができます。そのようなアクションを指定するには、ブロック パラメーターのダイアログ ボックスの [範囲外入力の診断] リストからアクションを選択します。

丸め手法

入力がブレークポイント値の間かブレークポイント ベクトルの範囲外にあり、内挿も外挿も指定しなかった場合、ブロックは隣接するブレークポイントに値を丸め、対応する出力値を返します。たとえば、Lookup Table Dynamic ブロックで、以下の丸め手法のいずれかを選択できます。

  • 入力の最近傍を使用 — 最も近い入力値に対応する出力値を返します。

  • 入力の下の値を使用 — 入力値のすぐ下のブレークポイント値に対応する出力値を返します。入力値の下にブレークポイント値がない場合は、その入力値に最も近いブレークポイント値が返されます。

  • 入力の上の値を使用 — 入力値のすぐ上のブレークポイント値に対応する出力値を返します。入力値の上にブレークポイント値がない場合は、その入力値に最も近いブレークポイント値が返されます。

ルックアップ手法の出力例

次のモデルで、Lookup Table Dynamic ブロックは [-5:5] によって与えられたブレークポイント データのベクトルと sinh([-5:5]) によって与えられたテーブル データのベクトルを受け入れます。

Lookup Table Dynamic ブロックは、指定されたルックアップ手法と入力を使用した場合、次の値を出力します。

ルックアップ手法入力出力コメント

内挿 -
外挿

1.4

2.156

N/A

5.2

83.59

N/A

内挿 -
最後の値を使用

1.4

2.156

N/A

5.2

74.2

ブロックは sinh(5.0) の値を使用します。

入力の上の値を使用

1.4

3.627

ブロックは sinh(2.0) の値を使用します。

5.2

74.2

ブロックは sinh(5.0) の値を使用します。

入力の下の値を使用

1.4

1.175

ブロックは sinh(1.0) の値を使用します。

-5.2

-74.2

ブロックは sinh(-5.0) の値を使用します。

入力の最近傍を使用

1.4

1.175

ブロックは sinh(1.0) の値を使用します。

関連するトピック