coder.varsize
サイズ非互換性エラーを解決して上限を宣言
構文
説明
coder.varsize(
は、実行時に変数 varName1,...,varNameN
)varName1,...,varNameN
の次元のサイズ変更を許可するようにコード ジェネレーターに指示します。それぞれの配列の各次元について、コード ジェネレーターで上限の判別が試行されます。サイズが 1
の次元 ("大きさが 1 の次元") は固定サイズのままになります。大きさが 1 の次元のサイズ変更を許可するようにコード ジェネレーターに指示するには、upperBounds
引数と variableSize
引数を使用して可変サイズの上限を指定する必要があります。コード生成用に MATLAB® コードで可変サイズのデータを定義する方法について詳しくは、コード生成のための可変サイズ データの定義を参照してください。
coder.varsize(
は、変数 varName1,...,varNameN
,upperBounds
)varName1,...,varNameN
の各次元の上限を指定します。大きさが 1 の次元は固定サイズのままになります。
coder.varsize(
は、varName1,...,varNameN
,upperBounds
,variableSize
)upperBounds
で指定された各上限について、その上限が固定サイズか可変サイズかを指定します。大きさが 1 の次元のサイズ変更を許可するようにコード ジェネレーターに指示するには、可変サイズの上限を明示的に指定します。
例
入力引数
制限
コード生成では、グローバル変数、MATLAB クラス、および MATLAB クラスのプロパティでの
coder.varsize
の使用はサポートされていません。コード生成では、string での
coder.varsize
の使用はサポートされていません。エラーの解決: string でサポートされない coder.varsize (MATLAB Coder)を参照してください。coder.varsize
命令により、コード ジェネレーターは変数のサイズが変化することを可能にするよう指示を受けます。これは変数のサイズを変更しません。たとえば、以下のコードの抜粋について考えます。... x = 7; coder.varsize("x", [1 5]); disp(size(x)); ...
coder.varsize
命令の後、x
はまだ 1 行 1 列の配列です。x
の現在のサイズを超えて要素に値を代入することはできません。たとえば、このコードは、インデックスの 3 がx
の次元を超えるため、実行時エラーとなります。... x = 7; coder.varsize("x", [1,5]); x(3) = 1; ...
coder.varsize
を関数の入力引数で呼び出すことはできません。代わりに、次のようにします。関数がエントリポイント関数である場合、コマンド ラインで
coder.typeof
を使用して、入力引数が可変サイズであることを指定します。または、MATLAB Coder™ アプリの [入力の型を定義] ステップを使用して、エントリポイント関数の入力引数が可変サイズであることを指定します。関数がエントリポイント関数ではない場合、呼び出し元の関数で、呼び出される関数への入力となる変数について
coder.varsize
を使用します。
スパース行列の場合、
coder.varsize
は可変サイズの次元を制限なしとして扱います。cell 配列で
coder.varsize
を使用するには、cell 配列は同種でなければなりません。コード生成における cell 配列の制限事項を参照してください。
ヒント
多くの場合、コード ジェネレーターは、変数のサイズが実行時に変更される可能性があることを判別できます。その場合、
coder.varsize
命令を使用する必要はありません。coder.varize
は、コード ジェネレーターでサイズ オーバーフロー エラーが生成される場合、または上限を指定する場合にのみ使用してください。可変サイズの出力変数を MATLAB Function ブロックで宣言するには、[シンボル] ペインおよびプロパティ インスペクターを使用します。
coder.varsize
宣言で上限を指定する場合、その上限はプロパティ インスペクターの上限と一致しなければなりません。可変サイズの MATLAB Function ブロック変数の宣言を参照してください。coder.varsize
宣言で上限を指定せず、コード ジェネレーターが上限を推論できない場合、生成されたコードでは動的メモリ割り当てが使用されます。動的メモリ割り当ては生成されたコードの速度を低下させる可能性があります。場合によっては、upperBounds
引数を使用して上限を指定することで、動的メモリ割り当てを回避できます。coder.varsize
を使用して次元の上限が 1 であると指定すると、既定では、次元は固定サイズ 1 になります。次元が 0 または 1 になりうることを指定するには、variableSize
ベクトルの対応する要素をtrue
に設定します。たとえば、次の命令は、x
の最初の次元が固定サイズの 1 で、他の次元が可変サイズの5
であることを指定します。coder.varsize('x',[1 5 5])
対照的に、次のコードは、
x
の最初の次元が上限 1 の可変サイズであることを指定します。coder.varsize("x",[1 5 5],[true true true])
外部関数の出力を使用する場合、コード ジェネレーターはコード生成時にその出力のサイズを決定できません。
coder.varsize
を使用して、その出力の保存に使用する変数を可変サイズとして扱うようにコード ジェネレーターに指示してください。外部関数の可変サイズの出力を実行時に使用を参照してください。特定の状況下では、
coder.varsize
を使用して cell 配列を強制的に同種にすることができます。cell 配列を可変サイズにするかの制御を参照してください。
バージョン履歴
R2011a で導入