coder.typeof

Пакет: кодер

Создайте объект coder.Type представлять тип входного параметра функции точки входа

Синтаксис

t = coder.typeof(v)
t = coder.typeof(v, sz, variable_dims)
t = coder.typeof(t)

Описание

t = coder.typeof(v) создает объект, который выводит от coder.Type, чтобы представлять тип v для генерации кода. Используйте coder.typeof, чтобы задать только входные типы параметра. Например, используйте его с функцией codegen опция -args или в проекте MATLAB® Coder™, когда вы зададите входной тип на примере. Не используйте его в коде MATLAB, из которого вы намереваетесь сгенерировать код.

t = coder.typeof(v, sz, variable_dims) возвращает измененную копию t = coder.typeof (v) с (верхней границей) размер, заданный sz и переменными размерностями, заданными variable_dims.

  • Если sz задает inf для размерности, то размер размерности неограничен, и размерность является переменным размером.

  • Когда sz является [], верхние границы v не изменяются.

  • Если вы не задаете параметр входа variable_dims, ограниченные размерности типа фиксируются.

  • Скалярный variable_dims применяется ко всем размерностям. Однако, если variable_dims является 1, размер одноэлементной размерности остается фиксированным.

  • Когда v является массивом ячеек, элементы которого имеют те же классы, но различные размеры, если вы задаете размерности переменного размера, coder.typeof, создают гомогенный тип массива ячеек. Если элементы имеют различные классы, coder.typeof сообщает об ошибке.

t = coder.typeof(t), то, где t является объектом coder.Type, возвращает сам t.

Входные параметры

sz

Вектор размера, задающий каждую размерность текстового объекта.

t

Объект coder.Type

v

Выражение MATLAB, которое описывает множество значений, представленное этим типом.

v может быть MATLAB, числовой, логический, char, перечисление или массив фиксированной точки. v может также быть массивом ячеек, структурой или классом значения, который содержит предыдущие типы.

variable_dims

Логический вектор, который задает, является ли каждая размерность переменным размером (TRUE) или (FALSE) фиксированный размер.

Для массива ячеек, если элементы имеют различные классы, вы не можете задать размерности переменного размера.

Выходные аргументы

t

Объект coder.Type

Примеры

Создайте тип для простого фиксированного размера, который удваивает матрица 5x6.

coder.typeof(ones(5, 6))         
 % returns 5x6 double
coder.typeof(0, [5 6])           
 % also returns 5x6 double

Создайте тип для матрицы переменного размера, удваивается.

coder.typeof(ones(3,3), [], 1)    
% returns :3 x :3 double
% ':' indicates variable-size dimensions

Создайте тип для структуры с полем переменного размера.

x.a = coder.typeof(0,[3 5],1);
x.b = magic(3);
coder.typeof(x)
% Returns 
% coder.StructType
%    1x1 struct
%      a:  :3x:5 double
%      b:  3x3  double
% ':' indicates variable-size dimensions

Создайте тип для гомогенного массива ячеек с полем переменного размера.

a = coder.typeof(0,[3 5],1);
b = magic(3);
coder.typeof({a b})
% Returns 
% coder.CellType
%   1x2 homogeneous cell 
%      base: :3x:5 double
% ':' indicates variable-size dimensions

Создайте тип для неоднородного массива ячеек.

a = coder.typeof('a');
b = coder.typeof(1);
coder.typeof({a b})
% Returns 
% coder.CellType
%   1x2 heterogeneous cell 
%      f0: 1x1 char
%      f1: 1x1 double

Создайте переменный размер гомогенный тип массива ячеек из массива ячеек, который имеет тот же класс, но различные размеры.

  1. Создайте тип для массива ячеек, который содержит два вектора символов с различными размерами. Тип массива ячеек неоднороден.

    coder.typeof({'aa', 'bbb'})
    % Returns
    % coder.CellType
    %   1x2 heterogeneous cell 
    %      f0: 1x2 char
    %      f1: 1x3 char
    
  2. Создайте тип с помощью того же входа массива ячеек. На этот раз укажите, что тип массива ячеек имеет размерности переменного размера. Тип массива ячеек является гомогенным.

    coder.typeof({'aa','bbb'},[1,10],[0,1])
    % Returns
    % coder.CellType
    %   1x:10 homogeneous cell 
    %      base: 1x:3 char
    

Создайте тип для матрицы с размерностями переменного размера и фиксированным размером.

coder.typeof(0, [2,3,4], [1 0 1]);
% Returns :2x3x:4 double 
% ':' indicates variable-size dimensions
coder.typeof(10, [1 5], 1) 
% returns double 1 x  :5
% ':' indicates variable-size dimensions

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

coder.typeof(10,[inf,3]) 
% returns double:inf x 3
% ':' indicates variable-size dimensions

Создайте тип для матрицы, удваивается, первая размерность неограниченное, второе измерение с переменным размером с верхней границей 3.

coder.typeof(10, [inf,3],[0 1]) 
% returns double :inf x :3
% ':' indicates variable-size dimensions

Преобразуйте матрицу фиксированного размера в матрицу переменного размера.

 coder.typeof(ones(5,5), [], 1) 
% returns double :5x:5
% ':' indicates variable-size dimensions

Создайте вложенную структуру (структура как поле другой структуры).

S = struct('a',double(0),'b',single(0))
SuperS.x = coder.typeof(S)
SuperS.y = single(0)
coder.typeof(SuperS)  
% Returns 
% coder.StructType
% SuperS:  1x1 struct
%   with fields 
%      x:  1x1 struct
%         with fields
%             a: 1x1 double
%             b: 1x1 single
%      y:  1x1  single

Создайте структуру, содержащую массив переменного размера структур как поле.

S = struct('a',double(0),'b',single(0))
SuperS.x = coder.typeof(S,[1 inf],[0 1])
SuperS.y = single(0)
coder.typeof(SuperS)  
% Returns 
% coder.StructType
% SuperS:  1x1 struct
%   with fields 
%      x:  1x:inf struct
%         with fields
%             a: 1x1 double
%             b: 1x1 single
%      y:  1x1  single
% ':' indicates variable-size dimensions

Создайте тип для объекта класса значения

  1. Создайте этот класс значения:

    classdef mySquare
        properties
            side;
        end
        methods
            function obj = mySquare(val)
                if nargin > 0
                    obj.side = val;
                end
            end
            function a = calcarea(obj)
                a = obj.side * obj.side;
            end
        end
    end

  2. Создайте объект mySquare.

    sq_obj = coder.typeof(mySquare(4))
    sq_obj = 
    
    coder.ClassType
       1×1 mySquare   
          side: 1×1 double

  3. Создайте тип для объекта, который имеет те же свойства как sq_obj.

    t = coder.typeof(sq_obj)
    t = 
    
    coder.ClassType
       1×1 mySquare   
          side: 1×1 double

Также можно создать тип из определения класса:

t = coder.typeof(mySquare(4))
t = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

Создайте тип для скаляра строки

  1. Задайте скаляр строки. Например:

    s = "mystring";

  2. Создайте тип из s.

    t = coder.typeof(s);

  3. Чтобы сделать переменный размер t, присвойте свойство Value t к типу для вектора символов переменного размера, который имеет верхнюю границу, которую вы хотите. Например, укажите, что тип t является переменным размером с верхней границей 10.

    t.Properties.Value = coder.typeof('a',[1 10], [0 1]);

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

    t.Properties.Value = coder.typeof('a',[1 inf]);

  4. Передайте тип codegen при помощи опции -args.

    codegen myFunction -args {t}

Ограничения

  • Для разреженных матриц coder.typeof пропускает верхние границы для размерностей переменного размера.

Советы

  • coder.typeof фиксирует размер одноэлементной размерности, если аргумент variable_dims явным образом не указывает, что одноэлементная размерность имеет переменный размер.

    Например, следующий код задает 1:10 дважды. Первая размерность (одноэлементная размерность) имеет фиксированный размер. Второе измерение имеет переменный размер.

    t = coder.typeof(5,[1 10],1)
    В отличие от этого, следующий код задает:1-by-:10 дважды. Обе размерности имеют переменный размер.
    t = coder.typeof(5,[1 10],[1 1])

    Примечание

    Для блока MATLAB function одноэлементные размерности сигналов ввода или вывода не могут иметь переменного размера.

  • Если вы уже указываете, что тип входной переменной с помощью функции типа, не использует coder.typeof, если вы также не хотите задать размер. Например, вместо coder.typeof(single(0)), используйте синтаксис single(0).

  • Для типов массива ячеек coder.typeof определяет, является ли тип массива ячеек гомогенным или неоднородным. Если элементы массива ячеек имеют тот же класс и размер, coder.typeof возвращает гомогенный тип массива ячеек. Если элементы имеют различные классы, coder.typeof возвращает неоднородный тип массива ячеек. Для некоторых массивов ячеек классификация как гомогенная или неоднородная неоднозначна. Например, тип для {1 [2 3]} может быть 1x2 неоднородный тип, где первый элемент является двойным, и второй элемент 1x2 дважды. Тип может также быть 1x3 гомогенный тип, в котором элементы имеют класс дважды и размер 1x:2. Для этих неоднозначных случаев coder.typeof использует эвристику, чтобы классифицировать тип как гомогенный или неоднородный. Если вы хотите различную классификацию, используйте кодер. CellType makeHomogeneous или методы makeHeterogeneous, чтобы сделать тип с классификацией, которую вы хотите. Метод makeHomogeneous делает гомогенную копию типа. Метод makeHeterogeneous делает неоднородную копию типа.

    makeHomogeneous и методы makeHeterogeneous постоянно присваивают классификацию как неоднородную и гомогенную, соответственно. Вы не можете дальнейшее использование один из этих методов, чтобы создать копию, которая имеет различную классификацию.

Введенный в R2011a