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