Проверка достоверности массива
validateattributes( проверяет этот массив A,classes,attributes)A принадлежит хотя бы одному из указанных классов (или его подклассу) и имеет все указанные атрибуты. Если A не соответствует критериям, тогда MATLAB ® выдает ошибку и отображает форматированное сообщение об ошибке. В противном случае validateattributes завершается без отображения выходных данных.
validateattributes( включает позицию ввода в списке аргументов функции как часть любых генерируемых сообщений об ошибках.A,classes,attributes,argIndex)
validateattributes( включает указанное имя функции в сгенерированные идентификаторы ошибок.A,classes,attributes,funcName)
validateattributes( включает указанное имя переменной в создаваемые сообщения об ошибках.A,classes,attributes,funcName,varName)
classes = {'numeric'};
attributes = {'size',[4,6,2]};
A = rand(3,5,2);
validateattributes(A,classes,attributes)Expected input to be of size 4x6x2 when it is actually size 3x5x2.
Поскольку A не соответствует указанным атрибутам, MATLAB выдает сообщение об ошибке.
Определите, увеличивается массив или нет.
A = [1 5 8 2;
9 6 9 4]
validateattributes(A, {'double'},{'nondecreasing'})
validateattributes(A, {'double'},{'increasing'})
A =
1 5 8 2
9 6 9 4
С тех пор A увеличивается и не увеличивается, validateattributes не выдает ошибку ни для одной из проверок атрибутов.
Настройка A(2,3) равно A(1,3) приводит к столбцу, который больше строго не увеличивается, поэтому validateattributes выдает ошибку.
A(2,3) = 8
validateattributes(A, {'double'},{'increasing'})A =
1 5 8 2
9 6 8 4
Expected input to be strictly increasing.
Однако столбцы остаются неизменными, поскольку каждый элемент столбца равен предыдущему элементу столбца или превышает его. Следующий код не вызывает ошибки.
validateattributes(A, {'double'},{'nondecreasing'})
Предполагая, что a является вторым входным аргументом функции, проверьте ее неотрицательность.
a = complex(1,1);
validateattributes(a,{'numeric'},{'nonnegative'},2)Expected input number 2 to be nonnegative.
Поскольку комплексные числа не имеют четко определенного порядка в комплексной плоскости, validateattributes не признает их положительными или отрицательными.
Проверьте, что значения в массиве являются 8-битными целыми числами от 0 до 10.
Предположим, что этот код встречается в функции с именем Rankings.
classes = {'uint8','int8'};
attributes = {'>',0,'<',10};
funcName = 'Rankings';
A = int8(magic(4));
validateattributes(A,classes,attributes,funcName)Error using Rankings Expected input to be an array with all of the values < 10.
inputParserСоздание пользовательской функции, проверяющей входные параметры с помощью inputParserи использовать validateattributes в качестве функции проверки для addRequired и addOptional методы.
Определите функцию.
function a = findArea(shape,dim1,varargin) p = inputParser; charchk = {'char'}; numchk = {'numeric'}; nempty = {'nonempty'}; addRequired(p,'shape',@(x)validateattributes(x,charchk,nempty)) addRequired(p,'dim1',@(x)validateattributes(x,numchk,nempty)) addOptional(p,'dim2',1,@(x)validateattributes(x,numchk,nempty)) parse(p,shape,dim1,varargin{:}) switch shape case 'circle' a = pi * dim1.^2; case 'rectangle' a = dim1 .* p.Results.dim2; end end
Вызовите функцию с нечисловым третьим входом.
myarea = findArea('rectangle',3,'x')
Error using findArea (line 10) The value of 'dim2' is invalid. Expected input to be one of these types: double, single, uint8, uint16, uint32, uint64, int8, int16, int32, int64
Проверьте входы функции и включите информацию о имени ввода и позиции в сгенерированной ошибке.
Определите функцию.
function v = findVolume(shape,ht,wd,ln) validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1) validateattributes(ht,{'numeric'},{'nonempty'},mfilename,'Height',2) validateattributes(wd,{'numeric'},{'nonempty'},mfilename,'Width',3) validateattributes(ln,{'numeric'},{'nonempty'},mfilename,'Length',4)
Вызовите функцию без shape входной аргумент.
vol = findVolume(10,7,4)
Error using findVolume
Expected input number 1, Shape, to be one of these types:
char
Instead its type was double.
Error in findVolume (line 2)
validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1)Имя функции становится частью идентификатора ошибки.
MException.last.identifier
ans = MATLAB:findVolume:invalidType
A - ВходВвод, заданный как массив любого типа.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | cell | function_handle
Поддержка комплексного номера: Да
classes - Допустимые типы данныхДопустимые типы данных, указанные как символьный вектор, массив ячеек символьных векторов или строковый массив. Каждый элемент classes может быть именем любого встроенного или пользовательского класса, включая:
'single' | Номер с одной точностью |
'double' | Число с двойной точностью |
'int8' | Целое число со знаком 8 бит |
'int16' | Знаковое 16-разрядное целое число |
'int32' | Подписанное 32-разрядное целое число |
'int64' | Подписанное 64-разрядное целое число |
'uint8' | Беззнаковое 8-разрядное целое число |
'uint16' | Беззнаковое 16-разрядное целое число |
'uint32' | Беззнаковое 32-разрядное целое число |
'uint64' | Беззнаковое 64-разрядное целое число |
'logical' | Логичный 1 (true) или 0 (false) |
'char' | Характер |
'string' | Строковый массив |
'struct' | Структурный массив |
'cell' | Массив ячеек |
'table' | Стол |
'function_handle' | Дескриптор функции |
'numeric' | Любой тип данных, для которого isa(A,'numeric') функция возвращает true, включая int8, int16, int32, int64, uint8, uint16, uint32, uint64, single, или double |
'< | Любое другое имя класса |
Типы данных: cell | string
attributes - Допустимые атрибутыДопустимые атрибуты, указанные как массив ячеек или строковый массив.
Для некоторых атрибутов также требуются числовые значения, например атрибуты, определяющие размер или количество элементов A. Для этих атрибутов числовое значение или вектор должны сразу следовать за именем атрибута в массиве ячеек. Строковый массив не может использоваться для представления числовых значений в attributes.
Эти атрибуты описывают размер и форму массива A.
'2d' | Двумерный массив, включая скаляры, векторы, матрицы и пустые массивы |
'3d' | Массив с тремя или меньшим размером |
'column' | Вектор столбца, N-по-1 |
'row' | Вектор строки, 1-by-N |
'scalar' | Скалярное значение, 1 на 1 |
'scalartext' | Скаляр строки или вектор символов, включая входные данные с нулевыми символами |
'vector' | Вектор строки или столбца или скалярное значение |
'size', [d1,...,dN] | Массив с размерами d1-by-... -by-dN. Чтобы пропустить проверку определенного размера, укажите NaN для этого измерения, например, [3,4,NaN,2]. |
'numel', N | Массив с N элементы |
'ncols', N | Массив с N колонки |
'nrows', N | Массив с N ряды |
'ndims', N | N-мерный массив |
'square' | Квадратная матрица; другими словами, двумерный массив с равным количеством строк и столбцов |
'diag' | Диагональная матрица |
'nonempty' | Нет размеров, равных нулю |
'nonsparse' | Массив, который не является разреженным |
Эти атрибуты определяют допустимые диапазоны для значений в A.
'>', N | Все значения больше N |
'>=', N | Все значения больше или равны N |
'<', N | Все значения меньше N |
'<=', N | Все значения меньше или равны N |
'finite' | Все значения являются конечными |
'nonnan' | Нет значений NaN (не число) |
Эти атрибуты проверяют типы значений в числовом или логическом массиве, A.
'binary' | Массив единиц и нулей |
'even' | Массив четных целых чисел (включает ноль) |
'odd' | Массив нечетных целых чисел |
'integer' | Массив целых значений |
'real' | Массив вещественных значений |
'nonnegative' | Ни один элемент не меньше нуля |
'nonzero' | Ни один элемент не равен нулю |
'positive' | Ни один элемент не меньше или равен нулю |
'decreasing' | Каждый элемент столбца меньше предыдущего, и ни один элемент не является NaN. |
'increasing' | Каждый элемент столбца больше предыдущего элемента, и ни один элемент не является NaN. |
'nondecreasing' | Каждый элемент столбца больше или равен предыдущему элементу, и ни один элемент не является NaN. |
'nonincreasing' | Каждый элемент столбца меньше или равен предыдущему элементу, и ни один элемент не является NaN. |
Типы данных: cell
funcName - Наименование функции для проверкиИмя функции для проверки, указанное как символьный вектор или как строковый скаляр. Если указан пустой символьный вектор, '', или <missing> строка, затем validateattributes функция игнорирует funcName вход.
Типы данных: char | string
varName - Имя входной переменнойИмя входной переменной, определяемой как символьный вектор или строковый скаляр. Если указан пустой символьный вектор, '', или <missing> строка, затем validateattributes функция игнорирует varName вход.
Типы данных: char | string
argIndex - Положение входного аргументаПозиция входного аргумента, заданная как положительное целое число.
Типы данных: double
Примечания и ограничения по использованию:
Некоторые сообщения об ошибках представляют собой упрощенную версию сообщения об ошибке MATLAB.
classes, funcName, varName, и argIndex аргументы должны быть постоянными.
Имена атрибутов должны быть постоянными.
В сгенерированном коде формат чисел в сообщении об ошибке может отличаться от формата в MATLAB. Например, вот сообщение об ошибке в MATLAB:
Expected input to be an array with all of the values > 3.
Вот сообщение об ошибке в сгенерированном коде:
Expected input to be an array with all of the values > 3.000000000000000e+00.
Эта функция полностью поддерживает массивы графических процессоров. Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
Эта функция полностью поддерживает распределенные массивы. Дополнительные сведения см. в разделе Запуск функций MATLAB с распределенными массивами (панель инструментов параллельных вычислений).
arguments | inputParser | is* | isa | isnumeric | validatestring
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.