이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

matlab.unittest.constraints.RelativeTolerance 클래스

패키지: matlab.unittest.constraints
슈퍼클래스: matlab.unittest.constraints.Tolerance

상대 수치 허용오차

설명

이 수치 Tolerance는 예상 값에 상대적인, 실제 값과 예상 값의 오차 크기를 평가합니다. 허용오차를 충족하려면 abs(expVal - actVal) <= relTol.*abs(expVal)이 true여야 합니다.

생성

RelativeTolerance(tolVals)는 예상 값에 상대적인, 실제 값과 예상 값의 오차 크기를 평가하는 상대 허용오차 객체를 만듭니다.

RelativeTolerance 생성자에 대한 입력값의 데이터형에 따라 허용오차가 지원하는 데이터형이 결정됩니다. 예를 들어, RelativeTolerance(10*eps)는 배정밀도 숫자형 배열을 비교할 RelativeTolerance를 생성하고, RelativeTolerance(single(2))는 단정밀도 숫자형 배열을 비교할 RelativeTolerance를 생성합니다. 비교 중인 실제 값과 예상 값에 숫자 데이터형이 두 개 이상 있는 경우, 허용오차는 생성자에 전달된 값으로 지정된 데이터형에만 적용됩니다.

서로 다른 데이터형에 대해 허용오차 값을 다르게 지정하려면 생성자에 여러 개의 허용오차 값을 전달할 수 있습니다. 예를 들어, RelativeTolerance(10*eps, 10*eps('single'))은 다음 절대 허용오차를 적용하는 RelativeTolerance를 생성합니다.

  • 10*eps는 배정밀도 숫자형 배열에 대해 상대 허용오차 10*eps를 적용합니다.

  • 10*eps('single')은 단정밀도 숫자형 배열에 대해 상대 허용오차 10*eps를 적용합니다.

허용오차를 &| 연산자와 결합하여 특정 데이터형에 대한 허용오차를 두 개 이상 지정할 수 있습니다. 두 개의 허용오차를 결합하려면 각 데이터형에 대한 허용오차 값의 크기가 호환될 수 있어야 합니다.

입력 인수

tolVals

수치 허용오차로, 부동소수점 숫자가 포함된 배열의 쉼표로 구분된 목록으로 지정됩니다. 각 입력 인수는 특정 데이터형에 대한 허용오차 사양을 포함합니다. 각 숫자형 배열은 실제 값 및 예상 값과 동일한 크기를 가진 스칼라 또는 배열일 수 있습니다.

속성

Values

수치 허용오차로, tolVals 입력 인수로 지정됩니다.

복사 의미 체계

값입니다. 값 클래스가 복사 작업에 미치는 영향에 대한 내용은 객체 복사 항목을 참조하십시오.

예제

모두 축소

대화형 방식 테스트를 위한 테스트 케이스를 생성합니다.

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

testCase = TestCase.forInteractiveUse;

실제 값 4.1과 예상 값 4.5 사이의 오차가 10% 미만이 되는지 어설션(Assertion)합니다.

testCase.assertThat(4.1, IsEqualTo(4.5, ...
    'Within', RelativeTolerance(0.1)))
Assertion passed.

대화형 방식 테스트를 위한 테스트 케이스를 생성합니다.

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

testCase = TestCase.forInteractiveUse;

다음과 같은 실제 셀형 배열과 예상 셀형 배열을 만듭니다.

act = {'abc', 123, single(106)};
exp = {'abc', 122, single(105)};

배열이 RelativeTolerance 제약 조건을 2% 내에서 충족하는지 테스트합니다.

testCase.verifyThat(act, IsEqualTo(exp, ...
    'Within', RelativeTolerance(0.02)))
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]
Expected cell:
        'abc'    [122]    [105]

허용오차가 double형 데이터형에만 적용되기 때문에 이 테스트 결과는 실패입니다.

서로 다른 데이터형에 대해 별개의 허용오차를 지정하는 허용오차 객체를 생성합니다.

tolObj = RelativeTolerance(0.02, single(0.02));

허용오차 2%double형과 single형 값 데이터에 적용됩니다.

예상 값과 실제 값이 RelativeTolerance 제약 조건을 충족하는지 확인합니다.

testCase.verifyThat(act, IsEqualTo(exp, '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;

실제 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.

허용오차를 결합하여, 값의 등식을 테스트할 때 절대 허용오차(floor 함수 적용)는 값이 0에 가까울 때 우세하고 상대 허용오차는 큰 값에서 우세하도록 만듭니다.

대화형 방식 테스트를 위한 테스트 케이스를 생성합니다.

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

testCase = TestCase.forInteractiveUse;

진공의 전자기 속성을 포함하는 두 구조체를 정의합니다. 한 구조체 approxVacuumProps는 진공 상태에서의 빛의 투자율(Permeability)과 속도에 대한 근삿값을 포함합니다.

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);

근삿값과 기준선 값(Baseline Value) 간의 상대 오차가 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

투자율의 상대 오차가 허용오차 범위 내에 있지 않기 때문에 이 테스트 결과는 실패입니다. 두 값 간의 오차가 작기는 하지만 두 값이 0에 가깝기 때문에, 값의 크기에 비해 오차가 허용오차를 충족할 만큼 작지 않습니다.

허용오차 객체를 생성하여 근삿값과 기준 값 사이의 절대 오차가 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 이내에 있는지 테스트합니다. 테스트에서 이 허용오차를 사용함으로써, 값이 0에 가까운 투자율은 절대 허용오차(floor 함수 적용)를 충족하고 값이 큰 빛의 속도는 상대 허용오차를 충족하게 됩니다.

testCase.verifyThat(approxVacuumProps, IsEqualTo(baselineVacuumProps, ...
    'Within', RelativeTolerance(eps*1e11)| AbsoluteTolerance(1e-4)))
Verification passed.

R2013a에 개발됨