Ограничения переменных размеров для генерации кода функций тулбокса

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

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

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

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

ФункцияОграничения для данных переменного размера
all

any

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

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