Следующие общие ограничения применяются к нескольким функциям тулбокса, но только для генерации кода. Чтобы определить, какие из этих ограничений применяются к конкретным функциям библиотеки, смотрите таблицу в разделе «Функции тулбокса с ограничениями» для данных переменного размера.
Входами для функции библиотеки должны быть векторы переменной длины или векторы фиксированного размера. Вектор переменной длины является массивом переменного размера, который имеет форму 1x:n
или :nx1
(одна размерность имеет переменный размер, а другой фиксированный размер 1). Другие формы не разрешены, даже если они являются векторами во время исполнения.
Это ограничение применяется к функциям, которые берут рабочую размерность (размерность, по которой нужно работать) как вход. В MATLAB® и в генерации кода, если вы не поставляете рабочую размерность, функция выбирает ее. В MATLAB функция выбирает первую размерность, размер которого не равен 1. Для генерации кода функция выбирает первую размерность, который имеет переменный размер или который имеет фиксированный размер, который не равен 1. Если рабочая размерность имеет переменный размер, и он становится равным 1 во время исполнения, то рабочая размерность отличается от рабочей размерности в MATLAB. Поэтому, когда проверки ошибок времени выполнения включены, может возникнуть ошибка.
Например, предположим, что X
- матрица переменного размера с размерностями 1x:3x:5
. В сгенерированном коде sum(X)
ведет себя как sum(X,2)
. В MATLAB, sum(X)
ведет себя как sum(X,2)
если только size(X,2)
равен 1. В MATLAB, когда size(X,2)
равен 1, sum(X)
ведет себя как sum(X,3)
.
Чтобы избежать этой проблемы, задайте предполагаемую рабочую размерность явно как постоянное значение. Для примера, sum(X,2)
.
Функция вызывает ошибку, когда массив переменного размера, не являющийся вектором переменной длины, принимает форму вектора во время выполнения. Чтобы избежать проблемы, задайте вход явно как вектор переменной длины вместо массива переменного размера.
Функция вызывает ошибку, если массив переменного размера принимает скалярное значение во время исполнения. Чтобы избежать этой проблемы, укажите скаляры как фиксированный размер.
В следующей таблице перечислены функции, которые имеют ограничения генерации кода для данных переменного размера. Дополнительные ограничения для этих функций и ограничения для всех функций и объектов, поддерживаемых для генерации кода, смотрите в Функции и Объекты, Поддерживаемые для генерации кода C/C + +.
Функция | Ограничения для данных переменного размера |
---|---|
all |
|
any |
|
cat |
|
conv |
|
cov |
|
cross |
|
deconv |
|
detrend |
|
diag |
|
diff |
|
fft |
|
filter |
|
hist |
|
histc |
|
ifft |
|
ind2sub |
|
interp1 |
|
ipermute |
|
issorted |
|
magic |
|
max |
|
maxk |
|
mean |
|
median |
|
min |
|
mink |
|
mode |
|
mtimes | Рассмотрим |
nchoosek |
|
permute |
|
planerot |
|
poly |
|
polyfit |
|
prod |
|
rand |
|
randi |
|
randn |
|
reshape |
|
roots |
|
shiftdim |
|
sort |
|
std |
|
sub2ind |
|
sum |
|
trapz |
|
typecast |
|
var |
|
vecnorm |
|