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

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

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

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

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

ФункцияОграничения для данных Переменного Размера
все

любой

\cat

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

conv

cov

крест

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

deconv

detrend

diag

diff

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

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

fft

фильтр

тсс

histc

ifft

ind2sub

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

interp1

ipermute

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

issorted

волшебство

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

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

max

maxk

среднее значение

медиана

min

норка

режим

mtimes, *

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

nchoosek

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

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

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

перестановка

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

planerot

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

poly

полисоответствие

напоминание

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.

изменение

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

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

корни

shiftdim

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

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

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

вид

станд

sub2ind

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

сумма

trapz

преобразование типа

var

vecnorm

Была ли эта тема полезной?