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