Main Content

ツールボックス関数のコード生成に対する可変サイズの制限

共通の制限事項

以下の共通制限事項は、複数のツールボックス関数に適用されます。ただし、適用されるのはコード生成時のみです。具体的なライブラリ関数にどの制限事項が適用されるかを判断するには、可変サイズ データについて制限のあるツールボックスの関数の表を参照してください。

可変長ベクトルの制限

ライブラリ関数への入力は、可変長または固定サイズのベクトルでなければなりません。可変長のベクトルとは、形状が 1x:n または :nx1 (1 つの次元が可変サイズで、もう 1 つがサイズ 1 で固定) の可変サイズの配列です。その他の形状は許可されていません。実行時にベクトルになる場合も同様です。

自動次元選択の制限事項

この制限は使用する次元 (動作する対象の次元) を入力として取得する関数に適用されます。MATLAB® およびコード生成で、使用する次元を指定しないと、関数が次元を選択します。MATLAB では、関数は、サイズが 1 ではない最初の次元を選択します。コード生成では、関数は、可変サイズを持つまたは 1 以外の固定サイズを持つ最初の次元を選択します。使用する次元が可変サイズで、実行時に 1 になる場合、使用する次元は MATLAB の使用する次元と異なります。したがって、実行時エラー チェックが有効な場合、エラーが発生する可能性があります。

たとえば、X は、次元が 1x:3x:5 の可変サイズ行列であるとします。生成されたコードで、sum(X)sum(X,2) のように動作します。MATLAB で、sum(X) は、size(X,2) が 1 でない場合、sum(X,2) のように動作します。MATLAB で、size(X,2) が 1 の場合は、sum(X)sum(X,3) のように動作します。

この問題を回避するには、使用する次元を定数値で明示的に指定します。例: sum(X,2)

配列からベクトルへの変更に関する制限事項

関数は、可変長ベクトルではない可変サイズの配列が実行時にベクトルの形状をとると、エラーを発行します。この問題を回避するには、入力を可変サイズの配列ではなく可変長ベクトルとして明示的に指定します。

配列からスカラーへの変更に制限事項

関数は、可変サイズの配列が実行時にスカラー値をとると、エラーを発行します。この問題を回避するには、スカラーを固定サイズとして指定します。

可変サイズ データについて制限のあるツールボックスの関数

以下の表に、コード生成に可変サイズ データの制限がある関数を一覧表示します。これらの関数の他の制限や、コード生成でサポートされるすべての関数およびオブジェクトの制限については、C/C++ コードの生成でサポートされている関数およびオブジェクト (MATLAB Coder)を参照してください。

関数可変サイズ データの制限
all

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

any

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

cat

  • 次元の引数は定数でなければなりません。

conv

  • 可変長ベクトルの制限を参照してください。

  • 入力ベクトルは方向が同じでなければなりません。どちらも行ベクトルか、どちらも列ベクトルかのいずれかです。

cov

cross

  • 実行時にベクトルになる可変サイズ配列の入力は、同じ方向でなければなりません。

deconv

detrend

diag

diff

  • 自動次元選択の制限事項を参照してください。

  • 入力のサイズが可変の場合、使用する次元の長さは、微分の次数の入力よりも大きくなければなりません。たとえば、入力が実行時に 3 行 5 列の可変サイズの行列の場合、diff(x,2,1) は動作しますが、diff(x,5,1) はランタイム エラーになります。

fft

filter

hist

histc

ifft

ind2sub

  • 最初の入力 (サイズ ベクトル入力) は固定サイズでなければなりません。

interp1

interpft

ipermute

  • 順序の入力は固定サイズでなければなりません。

issorted

magic

  • 引数は定数でなければなりません。

  • 出力は固定サイズの行列しか許されていません。

max

maxk

mean

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

median

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

min

mink

mode

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

mtimes

乗算 A*B について考えます。コード ジェネレーターは、A がスカラーで B が行列であることを認識すると、スカラー行列乗算のコードを生成します。ただし、コード ジェネレーターは、AB が可変サイズの行列であると認識すると、一般的な行列乗算のコードを生成します。実行時に、A がスカラーであることが判明しても、生成されたコードはその動作を変更しません。したがって、実行時エラー チェックが有効な場合、サイズの不一致エラーが発生する可能性があります。

nchoosek

  • 2 番目の入力の k は固定サイズのスカラーでなければなりません。

  • 2 番目の入力の k は、静的な割り当てに使用する定数でなければなりません。動的な割り当てが有効な場合は、2 番目の入力は変数でも構いません。

  • 動的な割り当てを有効にしない限り、変数 k を受け取って可変サイズの配列を作成することはできません。

permute

  • 順序の入力は固定サイズでなければなりません。

planerot

  • 入力は、固定サイズで 2 つの要素をもつ列ベクトルでなければなりません。実行時に 2 行 1 列のサイズをとる可変サイズの配列は指定できません。

poly

polyfit

prod

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

rand

  • 上限のある変数 N に対して、rand(1,N)1x:M の可変長のベクトルを生成します。ここで、MN の上限です。

  • 上限のある変数 N に対して、rand([1 N]):1x:M の可変長のベクトルを生成する場合があります。ここで、MN の上限です。

randi

  • 上限のある変数 N に対して、randi(imax,1,N)1 行 :M 列の可変長のベクトルを生成します。ここで、MN の上限です。

  • 上限のある変数 N に対して、randi(imax,[1 N]):1x:M の可変長のベクトルを生成する場合があります。ここで、MN の上限です。

randn

  • 上限のある変数 N に対して、randn(1,N)1x:M の可変長のベクトルを生成します。ここで、MN の上限です。

  • 上限のある変数 N に対して、randn([1 N]):1x:M の可変長のベクトルを生成する場合があります。ここで、MN の上限です。

reshape

  • 入力が可変サイズの配列で出力配列に 1 つ以上の固定長の次元が含まれている場合、出力の次元のサイズをサイズ ベクトル sz で指定しないでください。代わりに出力の次元のサイズをスカラー値 sz1,...,szN で指定します。固定サイズの次元は定数で指定してください。

  • 入力が可変サイズの空配列の場合、出力配列 (こちらも空) の最大次元サイズは、入力のサイズより大きくすることができません。

roots

shiftdim

  • 2 番目の引数を指定しない場合、シフトの数はコンパイル時に次元サイズの上限によって決定されます。そのため、実行時にはシフトの数が一定になります。

  • 実行時に 1 番目の次元にシフトする次元の長さが 1 になると、エラーが発生します。このエラーを回避するには、2 番目の入力引数としてシフトの数を (定数でなければならない) 指定します。

  • 正のシフト数を指定した場合、最初の入力引数は、同じ数の次元をもたなければなりません。

sort

std

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の次元の可変サイズの行列を渡すと、エラーが発生します。

sub2ind

  • 最初の入力 (サイズ ベクトル入力) は固定サイズでなければなりません。

sum

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

trapz

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の可変サイズの行列を最初の引数として渡すと、エラーが発生します。

typecast

var

  • 自動次元選択の制限事項を参照してください。

  • 実行時に 0 行 0 列の次元の可変サイズの行列を渡すと、エラーが発生します。

vecnorm