Управляйте, является ли массив ячеек Переменным Размером

Генератор кода классифицирует массив ячеек переменного размера как гомогенный. Элементы массива ячеек должны иметь тот же класс. В сгенерированном коде массив ячеек представлен как массив.

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

Смотрите также

|

Похожие темы