可変サイズ配列の上限の指定
次の場合に、配列の上限を指定します。
動的メモリ割り当てが無効になります。
動的メモリ割り当てが無効になっている場合、すべての配列に対して上限を指定しなければなりません。
コード ジェネレーターで配列に対して動的メモリ割り当てを使用しない場合。
配列サイズ (バイト) が動的メモリ割り当てしきい値未満となる上限を指定します。
可変サイズの入力の上限の指定
codegen
を使用してコードを生成する場合、可変サイズの入力の上限を指定するには、-args
オプションを用いて coder.typeof
コンストラクトを使用します。以下に例を示します。
codegen foo -args {coder.typeof(double(0),[3 100],1)}
このコマンドは関数 foo
への入力が 2 つの可変の次元をもつ実数 double 行列であることを指定します。最初の次元の上限は 3 です。2 番目の次元の上限は 100 です。
MATLAB® Coder™ アプリを使用してコードを生成する場合は、アプリを使用したエントリポイント関数の入力のプロパティの指定およびサイズのしきい値を満たした場合に次元を可変サイズにするを参照してください。
ローカル変数の上限の指定
静的な割り当てを使用する場合、コード ジェネレーターは高度な解析を使ってローカル データの上限を計算します。しかし、この解析が上限の検出に失敗したり、計算される上限が用途に不十分な精度である場合は、ローカル変数に対して明示的に上限を指定しなければなりません。
可変サイズ配列の次元を指定する変数の値の制約
可変サイズ配列の次元を指定する変数の値を制約するには、関数 assert
と関係演算子を使用します。例:
function y = dim_need_bound(n) %#codegen assert (n <= 5); L= ones(n,n); M = zeros(n,n); M = [L; M]; y = M;
この assert
ステートメントでは、入力 n
を最大サイズの 5 に制限します。L
は、各次元の上限を 5 とする可変サイズです。M
は、最初の次元の上限を 10、2 番目の次元の上限を 5 とする可変サイズです。
1 つのローカル変数のすべてのインスタンスに対する上限の指定
関数内の 1 つのローカル変数のすべてのインスタンスに対して上限を指定するには、関数 coder.varsize
を使用します。例:
function Y = example_bounds1(u) %#codegen Y = [1 2 3 4 5]; coder.varsize('Y',[1 10]); if (u > 0) Y = [Y Y+u]; else Y = [Y Y*u]; end
coder.varsize
の 2 つ目の引数が、最初の引数で指定された変数の各インスタンスの上限を指定します。この例では、引数 [1 10]
が、Y
のすべてのインスタンスについて以下のことを示しています。
最初の次元はサイズ 1 で固定。
2 番目の次元は上限 10 まで拡大可能。