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

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

Если массив ячеек является входным параметром функции точки входа, чтобы сделать его переменным размером:

  • В командной строке можно использовать 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

См. также

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте