Генератор кода классифицирует массив ячеек переменного размера как гомогенный. Элементы массива ячеек должны иметь тот же класс. В сгенерированном коде массив ячеек представлен как массив.
Если массив ячеек является входным параметром функции точки входа, чтобы сделать его переменным размером, использовать coder.typeof
или coder.newtype
создать тип для массива ячеек переменного размера. Например, чтобы создать тип для массива ячеек, первая размерность которого фиксируется и чье второе измерение имеет верхнюю границу 10, используйте этот код:
t = coder.typeof({1 2 3}, [1 10], [0 1])
Смотрите задают входные параметры массива ячеек Переменного Размера.
Если массив ячеек не является входным параметром функции точки входа, чтобы сделать его переменным размером:
Создайте массив ячеек при помощи cell
функция. Например:
function z = mycell(n, j) %#codegen x = cell(1,n); for i = 1:n x{i} = i; end z = x{j}; end
Для генерации кода, когда вы создаете массив ячеек переменного размера при помощи cell
, необходимо придерживаться определенных ограничений. См. Определение Массива ячеек Переменного Размера при помощи ячейки.
Вырастите массив ячеек. Например:
function z = mycell(n) %#codegen c = {1 2 3}; for i = 1:n c{end + 1} = 1; end z = c{n}; end
Обеспечьте массив ячеек, чтобы быть переменным размером при помощи coder.varsize
. Рассмотрите этот код:
function y = mycellfun() %#codegen c = {1 2 3}; coder.varsize('c', [1 10]); y = c; end
Без coder.varsize
C
фиксированный размер с размерностями 1 3. С coder.varsize
C
переменный размер с верхней границей 10.
Иногда, использование coder.varsize
изменяет классификацию массива ячеек от неоднородного до гомогенного. Рассмотрите этот код:
function y = mycell() %#codegen c = {1 [2 3]}; y = c{2}; end
Генератор кода классифицирует c
как неоднородный, потому что элементы имеют различные размеры. c
фиксированный размер с размерностями 1 2. Если вы используете coder.varsize
с c
, это становится гомогенным. Например:
function y = mycell() %#codegen c = {1 [2 3]}; coder.varsize('c', [1 10], [0 1]); y = c{2}; end
c
становится переменным размером гомогенный массив ячеек с размерностями 1:10.
Обеспечивать c
чтобы быть гомогенными, но не переменный размер, укажите, что ни одна из размерностей не варьируется. Например:
function y = mycell() %#codegen c = {1 [2 3]}; coder.varsize('c', [1 2], [0 0]); y = c{2}; end
coder.CellType
| coder.varsize