Main Content

MATLAB Function ブロック変数のサイズの指定

[シンボル] ペインとプロパティ インスペクター、またはモデル エクスプローラーを使用して、MATLAB Function ブロックの変数のサイズを指定できます。MATLAB Function ブロックでは、スカラー、ベクトル、または行列を使用できます。変数のプロパティの作成、削除、設定の詳細については、MATLAB Function ブロックの変数の作成と定義変数のデータ型の定義と変更を参照してください。変数がサイズを継承するように設定することも、サイズを手動で指定することもできます。

Simulink からのサイズの継承

既定のサイズは -1 です。これは変数が以下の [スコープ] プロパティの値に基づいてそのサイズを継承することを示します。

スコープ説明
入力関連付けられている入力端子に接続されている Simulink® 信号からサイズを継承します。
出力関連付けられている出力端子に接続されている Simulink 信号からサイズを継承します。
パラメーター関連付けられている Simulink または MATLAB® パラメーターからサイズを継承します。MATLAB Function ブロック パラメーター変数の設定を参照してください。

[スコープ] プロパティが [データ ストア メモリ] に設定されている変数は、常にサイズを継承します。

可変サイズのカスタマイズ

変数のサイズはスカラー、ベクトルまたは行列として手動で設定することもできます。サイズをスカラーとして指定するには、[サイズ]1 に設定するか、パラメーターをオフにします。サイズをベクトルまたは行列として指定するには、正の整数の行ベクトルを [row column] の形式で入力します。たとえば、サイズが 6 の列ベクトルを定義するには、[サイズ] プロパティを [6 1] に設定します。サイズが 5 の行ベクトルを定義するには、[サイズ] プロパティを [1 5] に設定します。データ サイズが 3 行 3 列の行列を定義するには、[サイズ] プロパティを [3 3] に設定します。

R2021b より前: MATLAB Function ブロックは列ベクトルを 1 次元データとして出力します。

既定では、MATLAB Function ブロックはその次元を保持します。従来の動作を維持するには、プロパティ インスペクターまたはモデル エクスプローラーで [出力列ベクトルを 1 次元データとして解釈] プロパティをオフにします。[サイズ] で単一の整数を使用して出力列ベクトルのサイズを定義できます。出力列ベクトルを 1 次元データとして解釈を参照してください。 (R2021b 以降)

必要な次元サイズの上限がわからない場合は、Inf を使用して非有界の次元を指定します。 (R2023b 以降)たとえば、列の上限がわからないが、行の最大サイズが 2 行の場合、[サイズ][2 Inf] に設定します。非有界の次元を指定するには、以下のようにします。

  • 変数は可変サイズでなければなりません。可変サイズの MATLAB Function ブロック変数の宣言を参照してください。

  • [言語] コンフィギュレーション パラメーターを [C++] に設定します。[コンフィギュレーション パラメーター] ウィンドウを開き、[シミュレーション ターゲット] ペインで [言語][C++] に設定します。

詳細については、Unbounded Variable-Size SignalsおよびUnbounded Variable-Size Signal Basic Operationsを参照してください。

また、[サイズ] プロパティを式によって設定することもできます。式には以下を含めることができます。

  • 数値定数

  • 算術演算子 +-*、および /

  • [スコープ] プロパティが Parameter に設定された変数の名前

  • MATLAB 関数の minmaxsize の呼び出し

これらの式は、[row column] 形式の 1 つの正の整数または 2 つの正の整数を出力しなければなりません。そうでない場合、指定されたサイズはモデルのコンパイル時にエラーを発生します。たとえば、[スコープ] プロパティがすべて [パラメーター] に設定された変数 kx、および y をもつ MATLAB Function ブロックについて考えてみます。ここで、k は正の整数、x および y は行列です。ブロックに対して新しい変数を作成する場合、以下のいずれかの式を使用して [サイズ] プロパティを定義できます。

k+1
size(x)
min(size(y))

カスタム サイズ プロパティの例

この例では、ベース ワークスペース変数の値に基づいてサイズを調整する入力変数をもつ MATLAB Function ブロックを使用します。

MATLAB 関数は、ベース ワークスペース変数 k の値に基づいてサイズを変更する入力信号を受け取ります。k は、開いたときにモデルが定義する配列です。Gain ブロックは入力信号に k を乗算し、この信号を MATLAB Function ブロックに出力します。入力変数のサイズを入力信号のサイズに一致させるために、MATLAB Function ブロックはカスタム サイズを入力変数 u に割り当てます。MATLAB Function ブロックを開いて変数およびコードを表示します。

function y = fcn(u)
y = 2*u;

変数プロパティを表示します。[関数] タブで、[データの編集] をクリックします。[シンボル] ペインで u を選択すると、プロパティ インスペクターにプロパティが表示されます。入力のサイズを一致させるために、ブロックは [サイズ] プロパティが size(k) に設定された u を定義します。

k のサイズを変更しても、u のサイズは k の新しいサイズに一致するようになります。

シミュレーションおよびサイズの一致

モデルのビルドを実行した後、モデル エクスプローラーの [コンパイルされたサイズ] 列にシミュレーションで使用された実際のサイズが表示されます。[サイズ] プロパティの値が -1 でなく、実際のサイズと一致しない場合、モデルのコンパイル中に不一致エラーが発生します。

参考

関連するトピック