このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
coder.varsize
可変サイズのデータの宣言
構文
説明
coder.varsize(
は、varName1,...,varNameN
)varName1,...,varNameN
という名前の変数が可変サイズをもつことを宣言します。この宣言により、コード ジェネレーターは、その変数が、生成されたコードの実行中にサイズを変更できるようにします。この構文では、変数の次元の上限を指定することも、どの次元がサイズを変更できるかを指定することもありません。コード ジェネレーターが上限を計算します。大きさが 1 の次元を除くすべての次元がサイズを変更できます。
これらの制限とガイドラインに従って coder.varsize
を使用します。
コード生成用の MATLAB® 関数内の
coder.varsize
を使用します。coder.varsize
宣言は、変数の初回の使用よりも前になければなりません。以下に例を示します。... x = 1; coder.varsize('x'); disp(size(x)); ...
coder.varsize
を使用して、出力引数が可変サイズであること、またはサイズ不一致エラーに対応することを宣言します。または、可変サイズのデータを定義するには、コード生成のための可変サイズ データの定義で説明している方法を使用します。
メモ
MATLAB Function ブロックでは、可変サイズの出力変数を宣言するには、[シンボル] ペインとプロパティ インスペクターを使用します。可変サイズの MATLAB Function ブロック変数の宣言 (Simulink)を参照してください。coder.varsize
宣言で上限を指定する場合、その上限はプロパティ インスペクターの上限と一致しなければなりません。
coder.varsize(
は、変数の各次元の上限も指定します。すべての変数が同じ数の次元をもっていなければなりません。大きさが 1 の次元を除くすべての次元がサイズを変更できます。varName1,...,varNameN
,ubounds
)
coder.varsize(
はまた、変数の各次元の上限と、各次元が固定サイズであるか可変サイズであるかを指定します。ある次元が固定サイズである場合、対応する varName1,...,varNameN
,ubounds
,dims
)ubound
要素がその次元の固定サイズを指定します。すべての変数が同じ固定サイズの次元と同じ可変サイズの次元をもちます。
コード ジェネレーターでは、コロンの接頭辞を使用して可変サイズの次元を示します。たとえば、配列 A
のサイズが 3x:5x:Inf
と示される場合は次のようになります。
1 番目の次元は固定サイズ
3
2 番目の次元は可変サイズで上限が
5
3 番目の次元は可変サイズで制限なし
例
入力引数
制限
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
を使用して、入力引数が可変サイズであることを指定します。または、アプリの [入力の型を定義] ステップを使用して、エントリポイント関数の入力引数が可変サイズであることを指定します。関数がエントリポイント関数ではない場合、呼び出す関数で、呼び出される関数の入力となる変数について
coder.varsize
を使用します。
スパース行列の場合、
coder.varsize
は可変サイズの次元の上限を下げます。cell 配列で
coder.varsize
を使用する際の制限は次のようになります。cell 配列は、同種である場合に限り、可変サイズとすることができます。異種混合 cell 配列で
coder.varsize
を使用する場合、コード ジェネレーターは同種の cell 配列を作成しようとします。コード ジェネレーターは cell 配列のすべての要素に適用されるクラスとサイズを見つけようとします。たとえば、cell 配列c = {1, [2 3]}
について考えます。両方の要素が、1 番目の次元が 1 の固定サイズで 2 番目の次元が上限 2 の可変サイズである double 型で表すことができます。コード ジェネレーターが共通のクラスと最大サイズを見つけられない場合、コード生成に失敗します。たとえば、cell 配列c = {'a',[2 3]}
について考えます。1 番目の要素がchar
で 2 番目の要素がdouble
であるため、コード ジェネレーターは両方の要素を表すことができるクラスを見つけられません。関数
cell
を使用して固定サイズの cell 配列を定義する場合、coder.varsize
を使用して、cell 配列が可変サイズであることを指定することはできません。たとえば、以下のコードでは、x = cell(1,3)
によりx
が固定サイズの 1 行 3 列の cell 配列になるため、コード生成エラーが発生します。... x = cell(1,3); coder.varsize('x',[1 5]) ...
中かっこを使用して定義した cell 配列と共に
coder.varsize
を使用できます。以下に例を示します。... x = {1 2 3}; coder.varsize('x',[1 5]) ...
関数
cell
を使用して可変サイズの cell 配列を作成するには、以下のコード パターンを使用します。function mycell(n) %#codegen x = cell(1,n); for i = 1:n x{i} = i; end end
を参照してください。
cell 配列の上限を指定するには、
coder.varsize
を使用します。function mycell(n) %#codegen x = cell(1,n); for i = 1:n x{i} = i; coder.varsize('x',[1,20]); end end
coder.varsize
以下についてはサポートされていません。グローバル変数
MATLAB クラスまたはクラス プロパティ
string スカラー
詳細
ヒント
コード生成レポートまたは MATLAB 関数レポートで、コロン (:) は、次元が可変サイズをもつことを示します。たとえば
1x:2
のサイズは、1 番目の次元が 1 の固定サイズをもち、2 番目の次元が上限が 2 の可変サイズをもつことを示します。coder.varsize
を使用して次元の上限が 1 であることを指定すると、既定で、次元は 1 の固定サイズをもちます。次元が 0 (空の配列) または 1 になりうると指定するには、引数dims
の対応する要素をtrue
に設定します。たとえば、このコードはx
の 1 番目の次元が 1 の固定サイズをもち、他の次元が 5 の可変サイズをもつことを指定します。coder.varsize('x',[1,5,5])
対照的に、このコードは
x
の 1 番目の次元 1 の上限をもち、可変サイズ (0 または 1) をもつことを指定します。coder.varsize('x',[1,5,5],[1,1,1])
入力変数、または入力変数を使用した計算の結果を使用して配列のサイズを指定する場合、入力変数は生成コードで可変サイズとして宣言されます。サイズの上限も指定する場合を除いて、配列で
coder.varsize
を再使用しないでください。coder.varsize
宣言で上限を指定せず、コード ジェネレーターが上限を決定できない場合、生成されたコードでは動的メモリ割り当てを使用します。動的メモリ割り当ては生成されたコードの速度を低下させる可能性があります。動的メモリ割り当てを回避するには、ubounds
引数を指定して上限を指定します。
バージョン履歴
R2011a で導入