Генератор кода классифицирует массив ячеек переменного размера как гомогенный. Элементы массива ячеек должны иметь тот же класс. В сгенерированном коде массив ячеек представлен как массив.
Сделать переменный размер массива ячеек:
Создайте массив ячеек при помощи функции cell
. Например:
function z = mycell(n, j) %#codegen assert (n < 100); 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}; if n > 3 c = {1 2 3 4}; end z = c{n}; end
Обеспечьте массив ячеек, чтобы быть переменным размером при помощи coder.varsize
. Рассмотрите этот код:
function y = mycellfun() %#codegen c = {1 2 3}; coder.varsize('c', [1 10]); y = c{1}; 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