exponenta event banner

класс matlab.unittest.constraints.AbsolityTolerance

Пакет: matlab.unittest.constraints
Суперклассы: matlab.unittest.constraints.Tolerance

Абсолютный числовой допуск

Описание

Это числовое значение Tolerance оценивает величину разницы между фактическими и ожидаемыми значениями. Чтобы допуск был удовлетворен, abs(expVal - actVal) <= absTol должно быть истинно.

Строительство

AbsoluteTolerance(tolVals) создает объект абсолютного допуска, который оценивает величину разницы между фактическими и ожидаемыми значениями.

Типы данных входных данных для AbsoluteTolerance конструктор определяет, какие типы данных поддерживает допуск. Например, AbsoluteTolerance(10*eps) конструирует AbsoluteTolerance для сравнения числовых массивов с двойной точностью, в то время как AbsoluteTolerance(int8(2)) конструирует AbsoluteTolerance для сравнения числовых массивов типа int8. Если сравниваемые фактические и ожидаемые значения содержат более одного числового типа данных, допуск применяется только к типам данных, указанным значениями, передаваемыми в конструктор.

Чтобы задать различные значения допуска для различных типов данных, можно передать несколько значений допуска конструктору. Например, AbsoluteTolerance(10*eps, 10*eps('single'), int8(1)) конструирует AbsoluteTolerance объект применяет следующие абсолютные допуски:

  • 10*eps применяет абсолютный допуск 10*eps для числовых массивов с двойной точностью.

  • 10*eps('single') применяет абсолютный допуск 10*eps для числовых массивов с одинарной точностью.

  • int8(1) применяет абсолютный допуск 1 для числовых массивов типа int8.

Можно указать несколько допусков для определенного типа данных, комбинируя допуски с & и | операторов. Для объединения двух допусков размеры значений допусков для каждого типа данных должны быть совместимыми.

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

tolVals

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

Свойства

Values

Числовые допуски, указанные tolVals входной аргумент

Копирование семантики

Значение. Сведения о том, как классы значений влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance

testCase = TestCase.forInteractiveUse;

Утверждают, что разница между фактическими значениями, 4.1и ожидаемое значение, 4.5, меньше, чем 0.5.

testCase.assertThat(4.1, IsEqualTo(4.5, ...
    'Within', AbsoluteTolerance(0.5)))
Assertion passed.

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance

testCase = TestCase.forInteractiveUse;

Создайте следующие фактические и ожидаемые массивы ячеек.

act = {'abc', 123, single(106), int8([1, 2, 3])};
exp = {'abc', 122, single(105), int8([2, 4, 6])};

Проверьте, удовлетворяют ли массивы требованиям AbsoluteTolerance ограничение в пределах значения 2.

testCase.verifyThat(act, IsEqualTo(exp, ...
    'Within', AbsoluteTolerance(2)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> Path to failure: <Value>{3}
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> The tolerance was ignored. The tolerance as specified does not support comparisons of single values.
        --> Failure table:
                    Actual    Expected    Error    RelativeError
                    ______    ________    _____    _____________
                
                    106       105         1        0.00952381   
        
        Actual single:
               106
        Expected single:
               105

Actual cell:
        'abc'    [123]    [106]    [1×3 int8]
Expected cell:
        'abc'    [122]    [105]    [1×3 int8]

Тест завершается неуспешно, поскольку допуск применяется только к double тип данных.

Создайте объект допуска, определяющий различные допуски для различных типов данных.

tolObj = AbsoluteTolerance(2, single(3), int8([2, 3, 5]));

Допуск 2 является примененным к double ценные данные. Допуск 3 применяется к single ценные данные. Допуск [2 3 5] применяется к соответствующим элементам массива int8 ценные данные.

Убедитесь, что ожидаемые и фактические значения соответствуют AbsoluteTolerance ограничение.

testCase.verifyThat(act, IsEqualTo(exp, 'Within', tolObj))
Interactive verification passed.

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

Определение фактического аппроксимации значения для pi.

act = 3.14;

Создание объекта допуска для проверки того, что разница между фактическими и ожидаемыми значениями находится в пределах 0.001 и в пределах 0.25%.

tolObj = AbsoluteTolerance(0.001) & RelativeTolerance(0.0025);

Убедитесь, что фактическое значение находится в пределах допуска ожидаемого значения pi.

testCase.verifyThat(act, IsEqualTo(pi, 'Within', tolObj))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> NumericComparator failed.
    --> The numeric values are not equal using "isequaln".
    --> AndTolerance failed.
        --> AbsoluteTolerance failed.
            --> The error was not within absolute tolerance.
        --> RelativeTolerance passed.
            --> The error was within relative tolerance.
        --> Failure table:
                    Actual        Expected               Error                RelativeError        AbsoluteTolerance    RelativeTolerance
                    ______    ________________    ____________________    _____________________    _________________    _________________
                
                    3.14      3.14159265358979    -0.00159265358979299    -0.000506957382897213    0.001                0.0025           
    
    Actual double:
           3.140000000000000
    Expected double:
           3.141592653589793

Фактическое значение не удовлетворяет AbsoluteTolerance ограничение.

Создание ограничения, которое выполняется, если значения находятся в пределах 0.001 или 0.25%, а затем повторно проверьте фактическое значение.

tolObj = AbsoluteTolerance(0.001) | RelativeTolerance(0.0025);
testCase.verifyThat(act, IsEqualTo(pi, 'Within', tolObj))
Verification passed.

Объедините допуски таким образом, чтобы при проверке равенства значений доминировал абсолютный (нижний) допуск, когда значения близки к нулю, и относительный допуск доминировал для больших значений.

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

Определите две структуры, содержащие электромагнитные свойства вакуума. Одна структура, approxVacuumProps, содержит приблизительные значения проницаемости и скорости света в вакууме.

approxVacuumProps.Permeability = 1.2566e-06; % Approximate
approxVacuumProps.Permitivity = 8.854187817*10^-12;
approxVacuumProps.LightSpeed = 2.9979e+08; % Approximate

baselineVacuumProps.Permeability = 4*pi*10^-7;
baselineVacuumProps.Permitivity = 8.854187817*10^-12;
baselineVacuumProps.LightSpeed = 1/sqrt(...
    baselineVacuumProps.Permeability*baselineVacuumProps.Permitivity);

Проверка того, что относительная разница между приблизительным и базовым значениями находится в пределах eps*1e11.

testCase.verifyThat(approxVacuumProps, IsEqualTo(baselineVacuumProps, ...
    'Within', RelativeTolerance(eps*1e11)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> Path to failure: <Value>.Permeability
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> RelativeTolerance failed.
            --> The error was not within relative tolerance.
            --> Failure table:
                          Actual            Expected                  Error                RelativeError         RelativeTolerance  
                        __________    ____________________    _____________________    _____________________    ____________________
                    
                        1.2566e-06    1.25663706143592e-06    -3.70614359173257e-11    -2.94925536216295e-05    2.22044604925031e-05
        
        Actual double:
                 1.256600000000000e-06
        Expected double:
                 1.256637061435917e-06

Actual struct:
        Permeability: 1.256600000000000e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 299790000
Expected struct:
        Permeability: 1.256637061435917e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 2.997924580105029e+08

Тест не проходит, поскольку относительная разница проницаемости не находится в пределах допуска. Разница между двумя значениями мала, но числа близки к нулю, поэтому разница относительно их размера недостаточно мала для удовлетворения допуска.

Построение объекта допуска для проверки того, что абсолютная разница между приблизительным и базовым значениями находится в пределах 1e-4.

testCase.verifyThat(approxVacuumProps, IsEqualTo(baselineVacuumProps, ...
    'Within', AbsoluteTolerance(1e-4)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> Path to failure: <Value>.LightSpeed
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> AbsoluteTolerance failed.
            --> The error was not within absolute tolerance.
            --> Failure table:
                         Actual          Expected              Error             RelativeError        AbsoluteTolerance
                        _________    ________________    _________________    ____________________    _________________
                    
                        299790000    299792458.010503    -2458.01050287485    -8.1990404935028e-06    0.0001           
        
        Actual double:
               299790000
        Expected double:
                 2.997924580105029e+08

Actual struct:
        Permeability: 1.256600000000000e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 299790000
Expected struct:
        Permeability: 1.256637061435917e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 2.997924580105029e+08

Тест не проходит, поскольку абсолютная разница в скорости света не находится в пределах допуска. Разница между двумя значениями мала относительно их размера, но слишком велика для удовлетворения допуска.

Построение логической дизъюнкции объектов допуска для проверки того, что абсолютная разница между приблизительными и базовыми значениями находится в пределах 1e-4 или относительная разница находится в пределах eps*1e11. Тест использует этот допуск, так что значения проницаемости, близкие к нулю, удовлетворяют абсолютному (напольному) допуску, а скорость световых значений, которые являются большими, удовлетворяют относительному допуску.

testCase.verifyThat(approxVacuumProps, IsEqualTo(baselineVacuumProps, ...
    'Within', RelativeTolerance(eps*1e11)| AbsoluteTolerance(1e-4)))
Verification passed.
Представлен в R2013a