Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

可変サイズ配列の上限の指定

次の場合に、配列の上限を指定します。

  • 動的メモリ割り当てが無効になります。

    動的メモリ割り当てが無効になっている場合、すべての配列に対して上限を指定しなければなりません。

  • コード ジェネレーターで配列に対して動的メモリ割り当てを使用しない場合。

    配列サイズ (バイト) が動的メモリ割り当てしきい値未満となる上限を指定します。

可変サイズの入力の上限の指定

このコマンドは関数 foo への入力が 2 つの可変の次元をもつ実数 double 行列であることを指定します。最初の次元の上限は 3 です。2 番目の次元の上限は 100 です。

可変サイズ入力の上限を指定するには、coder.typeof 構造と fiaccel -args オプションを使用します。以下に例を示します。

fiaccel foo -args {coder.typeof(fi(0),[3 100],1)}
このコマンドは、関数 foo への入力が 2 つの可変次元をもつ fi 型の行列であることを指定します。最初の次元の上限は 3 です。2 番目の次元の上限は 100 です。

ローカル変数の上限の指定

静的な割り当てを使用する場合、コード ジェネレーターは高度な解析を使ってローカル データの上限を計算します。しかし、この解析が上限の検出に失敗したり、計算される上限が用途に不十分な精度である場合は、ローカル変数に対して明示的に上限を指定しなければなりません。

可変サイズ配列の次元を指定する変数の値の制約

可変サイズ配列の次元を指定する変数の値を制約するには、関数 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 まで拡大可能。

参考

|

関連するトピック