exponenta event banner

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

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

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

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

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

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

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