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