Пакет: кодер
Создайте объект 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, чтобы задать только входные типы параметра. Например, используйте его с функцией fiaccel опция -args. Не используйте его в коде MATLAB®, из которого вы намереваетесь сгенерировать MEX-функцию.
возвращает измененную копию 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.
|
Вектор размера, задающий каждую размерность текстового объекта. |
|
Объект |
|
Выражение MATLAB, которое описывает множество значений, представленное этим типом.
|
|
Логический вектор, который задает, является ли каждая размерность переменным размером (TRUE) или (FALSE) фиксированный размер. Для массива ячеек, если элементы имеют различные классы, вы не можете задать размерности переменного размера. |
|
Объект |
Создайте тип для простого фиксированного размера, который удваивает матрица 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Создайте переменный размер гомогенный тип массива ячеек из массива ячеек, который имеет тот же класс, но различные размеры.
Создайте тип для массива ячеек, который содержит два вектора символов с различными размерами. Тип массива ячеек неоднороден.
coder.typeof({'aa', 'bbb'})
% Returns
% coder.CellType
% 1x2 heterogeneous cell
% f0: 1x2 char
% f1: 1x3 char
Создайте тип с помощью того же входа массива ячеек. На этот раз укажите, что тип массива ячеек имеет размерности переменного размера. Тип массива ячеек является гомогенным.
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Создайте тип для объекта класса значения
Создайте этот класс значения:
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Создайте объект mySquare.
sq_obj = coder.typeof(mySquare(4))
sq_obj =
coder.ClassType
1×1 mySquare
side: 1×1 doubleСоздайте тип для объекта, который имеет те же свойства как 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Создайте тип для скаляра строки
Задайте скаляр строки. Например:
s = "mystring";Создайте тип из s.
t = coder.typeof(s);
Чтобы сделать переменный размер t, присвойте свойство Value t к типу для вектора символов переменного размера, который имеет верхнюю границу, которую вы хотите. Например, укажите, что тип t является переменным размером с верхней границей 10.
t.Properties.Value = coder.typeof('a',[1 10], [0 1]);Чтобы указать, что t является переменным размером без верхней границы:
t.Properties.Value = coder.typeof('a',[1 inf]);Передайте тип codegen при помощи опции -args.
codegen myFunction -args {t}
Для разреженных матриц coder.typeof пропускает верхние границы для размерностей переменного размера.
coder.typeof фиксирует размер одноэлементной размерности, если аргумент variable_dims явным образом не указывает, что одноэлементная размерность имеет переменный размер.
Например, следующий код задает 1:10 дважды. Первая размерность (одноэлементная размерность) имеет фиксированный размер. Второе измерение имеет переменный размер.
t = coder.typeof(5,[1 10],1)
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 постоянно присваивают классификацию как неоднородную и гомогенную, соответственно. Вы не можете дальнейшее использование один из этих методов, чтобы создать копию, которая имеет различную классификацию.
coder.ArrayType | coder.CellType | coder.EnumType | coder.FiType | coder.PrimitiveType | coder.StructType | coder.Type | coder.newtype | coder.resize | fiaccel