Измеряющие переменную ограничения для генерации кода функций тулбокса

Общие ограничения

Следующие общие ограничения применяются к нескольким функциям тулбокса, но только для генерации кода. Чтобы определить, какое из этих ограничений применяется к определенным библиотечным функциям, см. таблицу в Функциях Тулбокса с Ограничениями для Данных Переменного Размера.

Ограничение вектора переменной длины

Входные параметры к библиотечной функции должны быть векторами переменной длины или векторами фиксированного размера. Вектор переменной длины является массивом переменного размера, который имеет форму 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

  • Аргумент Dimension должен быть константой.

conv

cov

cross

  • Входные параметры переменного размера массивов, которые становятся векторами во время выполнения, должны иметь ту же ориентацию.

deconv

detrend

diag

diff

  • Смотрите Автоматическое ограничение размерности.

  • Длина рабочей размерности должна быть больше, чем вход порядка различия, когда вход переменный измеренный. Например, если вход является матрицей переменного размера, которая 3 на 5 во время выполнения, diff(x,2,1) работает, но diff(x,5,1) генерирует ошибку времени выполнения.

fft

filter

hist

histc

ifft

ind2sub

  • Сначала введите (вход вектора размера) должен быть фиксированный размер.

interp1

ipermute

  • Вход порядка должен быть фиксированным размером.

issorted

magic

  • Аргумент должен быть константой.

  • Выведите могут быть матрицы фиксированного размера только.

max

maxk

mean

median

min

mink

mode

mtimes

Считайте умножение A*B. Если генератор кода имеет в виду, что A является скаляром, и B является матрицей, генератор кода производит код для умножения диагональной матрицы. Однако, если генератор кода имеет в виду, что A и B являются матрицами переменного размера, это производит код для общего умножения матриц. Во время выполнения, если A оказывается скаляром, сгенерированный код не изменяет свое поведение. Поэтому, когда проверки ошибки времени выполнения включены, ошибка несоответствия размера может произойти.

nchoosek

  • Второй вход, k, должен быть скаляром фиксированного размера.

  • Второй вход, k, должен быть константой для статического выделения. Если вы включаете динамическое выделение, второй вход может быть переменной.

  • Вы не можете создать массив переменного размера путем передачи в переменной, k, если вы не включаете динамическое выделение.

permute

  • Вход порядка должен быть фиксированным размером.

planerot

  • Введите должен быть фиксированный размер, двухэлементный вектор-столбец. Это не может быть массив переменного размера, который берет размер 2 1 во время выполнения.

poly

polyfit

prod

rand

  • Для верхне ограниченной переменной N rand(1,N) производит вектор переменной длины 1x:M, где M является верхней границей на N.

  • Для верхне ограниченной переменной N rand([1 N]) может произвести вектор переменной длины :1x:M, где M является верхней границей на N.

randi

  • Для верхне ограниченной переменной N randi(imax,1,N) производит вектор переменной длины 1x:M, где M является верхней границей на N.

  • Для верхне ограниченной переменной N randi(imax,[1 N]) может произвести вектор переменной длины :1x:M, где M является верхней границей на N.

randn

  • Для верхне ограниченной переменной N randn(1,N) производит вектор переменной длины 1x:M, где M является верхней границей на N.

  • Для верхне ограниченной переменной N randn([1 N]) может произвести вектор переменной длины :1x:M, где M является верхней границей на N.

reshape

  • Если вход является массивом переменного размера, и выходной массив имеет по крайней мере одну размерность фиксированной длины, не задавайте выходные размеры размерности в векторе размера sz. Вместо этого задайте выходные размеры размерности как скалярные значения, sz1,...,szN. Задайте размерности фиксированного размера как константы.

  • Когда вход является пустым массивом переменного размера, максимальный размер размерности выходного массива (также пустой) не может быть больше, чем тот из входа.

roots

shiftdim

  • Если вы не предоставляете второй аргумент, количество рабочих смен определяется во время компиляции верхними границами размеров размерности. Поэтому во время выполнения количество рабочих смен является постоянным.

  • Ошибка происходит, если размерность, которая переключена к первой размерности, имеет длину 1 во время выполнения. Чтобы избежать ошибки, предоставьте количество рабочих смен как второй входной параметр (должна быть константа).

  • Первый входной параметр должен иметь то же количество размерностей, когда вы предоставляете положительное число сдвигов.

sort

std

sub2ind

  • Сначала введите (вход вектора размера) должен быть фиксированный размер.

sum

trapz

typecast

var

vecnorm