Main Content

Prelookup ブロックと Interpolation ブロックの使用

この例では、Prelookup ブロックと Interpolation Using Prelookup ブロックの使用方法を示します。

はじめに

このモデルでは、Prelookup ブロックと Interpolation Using Prelookup ブロックを使用します。Prelookup ブロックは、ルックアップ テーブルのセット内で実行されるインデックス検索の数を最小限に抑えます。また、1 つのテーブル計算の中に、クリッピング アルゴリズム、外挿アルゴリズム、およびインデックス検索アルゴリズムを混在させることができます。Prelookup ブロックが計算のインデックス検索部分をどのように実行するか、また、Interpolation Using Prelookup ブロックが残りの部分をどのように実行するかを確認してください。

これらのブロックは、Simulink® ブロック ライブラリ内の Lookup Tables サブライブラリにあります。

最適化: Prelookup ブロックと Interpolation Using Prelookup ブロック

ブレークポイント セットに集中型のインデックス検索が設定されているテーブルについては、PreLookup ブロックの使用を検討してください。Prelookup ブロックを使用すると、インデックス検索を 1 回実行し、その結果を多くのテーブル ルックアップで再利用することができます。このモデルでは、3 つのインデックス検索の結果が 5 つのブロックで、合計 10 回使用されます。右側の例のような同等の標準的なルックアップ テーブルには、3 つではなく 10 のインデックス検索が必要となります。

最適化: Interpolation Using Prelookup ブロック内のサブテーブル選択次元オプション

このモデルの Interpolation ブロックの 1 つは、n 次元のテーブルの展開次元を "選択次元" としてマークできるという機能を使用して設定されます。つまり、その次元の入力は、サブテーブル選択をする (たとえば、3 次元のテーブルから 2 次元の平面を選択するなど) ためにのみ使用される整数ということです。その後、サブテーブルは通常の方法で内挿されます。

サブテーブルを内挿することによって、莫大な量の計算を省くことができます。内挿から次元が 1 つ削除されるごとに、計算量はほぼ半減します。N 次元内挿では、(2^N)-1 回の個別の内挿演算 (y = ylow + f*(yhigh-ylow)) を行う必要があるため、選択次元が 1 次元だけでも、内挿の速度をほぼ 2 倍にすることができます。極端な例として、サブテーブル選択が 3 次元で、2 次元の内挿を使用する 5 次元のテーブルの場合、5 次元の内挿では 2^5-1 = 31 回の内挿を行う必要がありますが、2 次元の内挿では、2^2 - 1 = 3 回だけで済みます。

選択端子は、単一のブロック内で複数のサブテーブル選択/内挿が可能になるように、ベクトル化機能をサポートしています。

サブテーブル演算モードまたは複数テーブル演算モードは、[ブロック パラメーター] ダイアログの [サブテーブル選択次元数] パラメーターに正の整数を設定すると、アクティブ化されます。設定した数値は、最高次元から選択する次元数として解釈されます。たとえば、3 次元のテーブルがある場合に 2 を選択すると、最初の次元が内挿され、次元 2 および 次元 3 が選択されます。

メモ: [強調表示の削除] メニュー項目または以下のコマンドを使用して、モデルから強調表示を削除できます。

hilite_system( subblk, 'none' );

ブレークポイント データとテーブル データの整合性チェック

Prelookup ブロックと Interpolation Using Prelookup ブロックを使用する場合は、Prelookup ブロックの [ブレークポイント データ] パラメーターの長さが、接続されている Interpolation Using Prelookup ブロックの [テーブル データ] パラメーターの対応する次元と一致していることを確認する必要があります。Simulink® は、ブロック線図の更新時には、必ずこの 2 つのブロック間の整合性をチェックします。Simulink は、矛盾しているブレークポイント データとテーブル データがあれば、エラーを報告します。以下に例を示します。

try
    evalc(['sim(', mdl, ')']);
catch E
    disp(['Error:', E.message]);
end
Error:The range of values for input port k2 of block '<a href="matlab:open_and_hilite_hyperlink ('sldemo_bpcheck/Interpolation on an 11x11 table ERROR IN DIM 2 ','error')">sldemo_bpcheck/Interpolation on an 11x11 table ERROR IN DIM 2 </a>' does not match the size of the corresponding table dimension of 11. Specify a different table dimension or modify the range of values for input port k2.