Генератор кода классифицирует массив ячеек переменного размера как гомогенный. Элементы массива ячеек должны иметь тот же класс. В сгенерированном коде массив ячеек представлен как массив.
Если массив ячеек является входным параметром функции точки входа, чтобы сделать его переменным размером:
В командной строке можно использовать функцию coder.typeof
или функцию coder.newtype
, чтобы создать тип для массива ячеек переменного размера. Например, чтобы создать тип для массива ячеек, первая размерность которого фиксируется и чье второе измерение имеет верхнюю границу 10, используйте этот код:
t = coder.typeof({1 2 3}, [1 10], [0 1])
В приложении MATLAB® Coder™ выберите Homogeneous cell array как тип входного параметра. Для размерности переменного размера укажите, что это неограниченно или имеет верхнюю границу.
Если массив ячеек не является входным параметром функции точки входа, чтобы сделать его переменным размером:
Создайте массив ячеек при помощи функции 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