assert
Можно использовать MATLAB® assert
функция, чтобы задать свойства первичной функции вводит непосредственно в вашем файле MATLAB.
Используйте assert
функция, чтобы вызвать стандартные функции MATLAB для определения класса, размера и сложности входных параметров первичной функции.
assert ( isa ( param, 'class_name') )
Устанавливает входной параметр param
к классу MATLAB class_name. Например, чтобы установить класс входа U
к 32-битному целому числу со знаком вызовите:
... assert(isa(U,'embedded.fi')); ...
Если вы устанавливаете класс входного параметра к fi
, необходимо также установить его numerictype
, смотрите Задают numerictype Входа Фиксированной точки. Можно также установить его fimath
свойства, смотрите, Задают fimath Входа Фиксированной точки.
Если вы устанавливаете класс входного параметра к struct
, необходимо задать свойства каждого поля в структуре в порядке, в котором вы задаете поля в определении структуры.
assert ( isfi ( param ) ) assert ( isa ( param, 'embedded.fi' ) )
Устанавливает входной параметр param
к классу MATLAB fi
(фиксированная точка числовой объект). Например, чтобы установить класс входа U
к fi
, вызов:
... assert(isfi(U)); ...
... assert(isa(U,'embedded.fi')); ...
Если вы устанавливаете класс входного параметра к fi
, необходимо также установить его numerictype
, смотрите Задают numerictype Входа Фиксированной точки. Можно также установить его fimath
свойства, смотрите, Задают fimath Входа Фиксированной точки.
assert ( isstruct ( param ) )
Устанавливает входной параметр param
к классу MATLAB struct
Структура. Например, чтобы установить класс входа U
к struct
, вызов:
... assert(isstruct(U)); ...
или
... assert(isa(U,'struct')); ...
Если вы устанавливаете класс входного параметра к struct
, необходимо задать свойства каждого поля в структуре в порядке, в котором вы задаете поля в определении структуры.
assert(iscell( param)) assert(isa(param, 'cell'))
Устанавливает входной параметр param
к классу MATLAB cell
CellArray. Например, чтобы установить класс входа C
к cell
, вызов:
... assert(iscell(C)); ...
или
... assert(isa(C, 'cell')); ...
Чтобы задать свойства элементов массива ячеек, смотрите Specifying Properties Массивов ячеек.
assert ( all ( size (param) == [dims ] ) )
Устанавливает входной параметр param
к размеру, заданному размерностями dims
. Например, чтобы установить размер входа U
к 3-на-2 матрице вызовите:
... assert(all(size(U)== [3 2])); ...
assert ( isscalar (param ) ) assert ( all ( size (param) == [ 1 ] ) )
Устанавливает размер входного параметра param
к скаляру. Например, чтобы установить размер входа U
к скаляру вызовите:
... assert(isscalar(U)); ...
... assert(all(size(U)== [1])); ...
assert ( isreal (param ) )
Указывает что входной параметр param
isreal. Например, чтобы задать тот вход U
действительно, вызовите:
... assert(isreal(U)); ...
assert ( ~isreal (param ) )
Указывает что входной параметр param
является комплексным. Например, чтобы задать тот вход U
является комплексным, вызовите:
... assert(~isreal(U)); ...
assert ( isequal ( numerictype ( fiparam ), T ) )
Устанавливает numerictype
свойства fi
введите параметр fiparam
к numerictype
объект T
. Например, чтобы задать numerictype
свойство входа U
фиксированной точки как
numerictype
со знаком объект
T
с 32-битным размером слова и 30-битной дробной длиной, используйте следующий код:
... % Define the numerictype object. T = numerictype(1, 32, 30); % Set the numerictype property of input U to T. assert(isequal(numerictype(U),T)); ...
assert ( isequal ( fimath ( fiparam ), F ) )
Устанавливает fimath
свойства fi
введите параметр fiparam
к fimath
объект F
. Например, чтобы задать fimath
свойство входа U
фиксированной точки так, чтобы это насыщало на целочисленном переполнении, используйте следующий код:
... % Define the fimath object. F = fimath('OverflowAction','Saturate'); % Set the fimath property of input U to F. assert(isequal(fimath(U),F)); ...
assert ( function1 ( params ) && function2 ( params ) && function3 ( params ) && ... )
Задает класс, размер и сложность одних или нескольких входных параметров с помощью одного assert
вызов функции. Например, следующий код задает тот вход U
двойная, комплексная, 3х3 матрица и вход V
16-битное беззнаковое целое:
... assert(isa(U,'double') && ~isreal(U) && all(size(U) == [3 3]) && isa(V,'uint16')); ...
Следуйте этим правилам при использовании assert
функция, чтобы задать свойства входных параметров первичной функции:
Вызовите assert
функции в начале первичной функции, перед любыми операциями управления потоками, такими как if
операторы или вызовы подпрограммы.
Не вызывайте assert
функции в условных построениях, таких как if
для
в то время как
, и switch
операторы.
Если вы устанавливаете класс входного параметра к fi
:
Необходимо также установить его numerictype
, смотрите Задают numerictype Входа Фиксированной точки.
Можно также установить его fimath
свойства, смотрите, Задают fimath Входа Фиксированной точки.
Если вы устанавливаете класс входного параметра к struct
, необходимо задать класс, размер и сложность каждого поля в структуре в порядке, в котором вы задаете поля в определении структуры.
В следующем примере, первичная функция MATLAB emcsqrtfi
берет один вход фиксированной точки: x
. Код задает следующие свойства для этого входа:
Свойство | Значение |
---|---|
класс | fi |
numerictype | numerictype объект T , как задано в первичной функции |
fimath | fimath объект F , как задано в первичной функции |
размер | scalar (по умолчанию) |
сложность | real (по умолчанию) |
function y = emcsqrtfi(x) T = numerictype('WordLength',32,'FractionLength',23,... 'Signed',true); F = fimath('SumMode','SpecifyPrecision',... 'SumWordLength',32,'SumFractionLength',23,... 'ProductMode','SpecifyPrecision',... 'ProductWordLength',32,'ProductFractionLength',23); assert(isfi(x)); assert(isequal(numerictype(x),T)); assert(isequal(fimath(x),F)); y = sqrt(x);
Задавать класс MATLAB cell
(массив ячеек), используйте один из следующих синтаксисов:
assert(iscell(param)) assert(isa( param, 'cell'))
Например, чтобы установить класс входа C
к cell
Использование:
... assert(iscell(C)); ...
или
... assert(isa(C, 'cell')); ...
Можно также задать размер массива ячеек и свойства элементов массива ячеек. Число элементов, которое вы задаете, определяет, является ли массив ячеек гомогенным или неоднородным. Смотрите Генерацию кода для Массивов ячеек (MATLAB Coder).
Если вы задаете свойства первого элемента только, массив ячеек является гомогенным. Например, следующий код задает тот C
1x3 гомогенный массив ячеек, элементы которого 1x1 дважды.
... assert(isa(C, 'cell')); assert(all(size(C) == [1 3])); assert(isa(C{1}, 'double')); ...
Если вы задаете свойства каждого элемента, массив ячеек неоднороден. Например, следующий код задает 1x2 неоднородный массив ячеек, первый элемент которого 1x1 char и чей второй элемент 1x3 дважды.
... assert(isa(C, 'cell')); assert(all(size(C) == [1 2])); assert(isa(C{1}, 'char')); assert(all(size(C{2}) == [1 3])); assert(isa(C{2}, 'double')); ...
Если вы указываете больше чем один элемент, вы не можете указать, что массив ячеек является переменным размером, даже если все элементы имеют те же свойства. Например, следующий код задает массив ячеек переменного размера. Поскольку код задает свойства первых и вторых элементов, сбоев генерации кода.
... assert(isa(C, 'cell')); assert(all(size(C) <= [1 2])); assert(isa(C{1}, 'double')); assert(isa(C{2}, 'double')); ...
В предыдущем примере, если вы указываете первый элемент только, можно указать, что массив ячеек является переменным размером. Например:
... assert(isa(C, 'cell')); assert(all(size(C) <= [1 2])); assert(isa(C{1}, 'double')); ...
Примите, что вы задали S
как следующая скалярная структура MATLAB:
S = struct('r',double(1),'i',fi(4,true,8,0));
S
и его поля, когда передано как вход к вашей функции MATLAB:function y = fcn(S) % Specify the class of the input as struct. assert(isstruct(S)); % Specify the size of the fields r and i % in the order in which you defined them. T = numerictype('Wordlength', 8,'FractionLength', ... 0,'signed',true); assert(isa(S.r,'double')); assert(isfi(S.i) && isequal(numerictype(S.i),T)); y = S;
Единственный способ назвать поле в структуре состоит в том, чтобы установить по крайней мере одно из своих свойств. Поэтому в предыдущем примере, assert
функция задает то поле S.r
имеет тип double
, даже при том, что double
значение по умолчанию.
Для массивов структур необходимо выбрать представительный элемент массива для определения свойств каждого поля. Например, примите, что вы задали S
как следующее 1 2 массив структур MATLAB:
S = struct('r',{double(1), double(2)},'i',... {fi(4,1,8,0), fi(5,1,8,0)});
Следующий код задает класс и размер каждого поля входа S
структуры использование первого элемента массива:
function y = fcn(S) % Specify the class of the input S as struct. assert(isstruct(S)); T = numerictype('Wordlength', 8,'FractionLength', ... 0,'signed',true); % Specify the size of the fields r and i % based on the first element of the array. assert(all(size(S) == [1 2])); assert(isa(S(1).r,'double')); assert(isfi(S(1).i) && isequal(numerictype(S(1).i),T)); y = S;
Единственный способ назвать поле в структуре состоит в том, чтобы установить по крайней мере одно из своих свойств. Поэтому в примере выше, assert
функция задает то поле S(1).r
имеет тип double
, даже при том, что double
значение по умолчанию.