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

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

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

    Для принудительного c чтобы быть однородным, но не переменным размером, задайте, что ни одна из размерностей не изменяется. Для примера:

    function y =  mycell()
    %#codegen
    c = {1 [2 3]};
    coder.varsize('c', [1 2], [0 0]);
    y = c{2};
    end

См. также

|

Похожие темы