ismembertol
허용오차 내에서 집합의 구성원인지 확인
구문
설명
은 LIA
= ismembertol(A
,B
,tol
)A
의 요소가 B
의 요소의 허용오차 범위 내에 있는 경우 논리값 1
(true
)을 포함하는 배열을 반환합니다. 그렇지 않으면 이 배열은 논리값 0
(false
)을 포함합니다. 다음과 같은 경우 두 값 u
와 v
는 허용오차 범위 내에 있는 것입니다.
abs(u-v) <= tol*max(abs([A(:);B(:)]))
즉, ismembertol
은 데이터의 크기를 기반으로 하여 tol
입력값을 스케일링합니다.
ismembertol
은 ismember
와 유사합니다. ismember
는 정확한 비교를 수행하는 반면 ismembertol
은 허용오차를 사용하여 비교를 수행합니다.
[___] = ismembertol(___,
는 위에 열거된 구문에 나와 있는 입력 인수나 출력 인수 조합 중 하나를 사용하여 하나 이상의 이름-값 쌍의 인수로 지정된 추가적인 옵션을 사용합니다. 예를 들어, Name,Value
)ismembertol(A,B,'ByRows',true)
는 A
의 행과 B
의 행을 비교한 후 논리형 열 벡터를 반환합니다.
예제
수치 오차가 있는 집합 구성원
벡터 x
를 만듭니다. x
를 변환한 후 이 변환된 값을 다시 역변환하여 두 번째 벡터 y
를 얻습니다. 이 변환 과정에서 y
에 반올림 차분이 발생합니다.
x = (1:6)'*pi; y = 10.^log10(x);
차분을 가져와서 x
와 y
가 동일하지 않은지 확인합니다.
x-y
ans = 6×1
10-14 ×
0.0444
0
0
0
0
-0.3553
ismember
를 사용하여 x
의 요소 중 y
에도 있는 요소를 찾습니다. ismember
함수는 정확한 비교를 수행한 후 x
의 행렬 요소 중 일부가 y
의 구성원이 아님을 확인합니다.
lia = ismember(x,y)
lia = 6x1 logical array
0
1
1
1
1
0
ismembertol
을 사용하여 작은 허용오차로 비교를 수행합니다. ismembertol
은 허용오차 범위 내에 있는 요소를 서로 같은 것으로 간주하여, x
의 모든 요소가 y
의 구성원임을 확인합니다.
LIA = ismembertol(x,y)
LIA = 6x1 logical array
1
1
1
1
1
1
행별로 집합 구성원 확인
기본적으로 ismembertol
은 허용오차 범위 내에 있는 요소를 찾지만, 허용오차 범위 내에 있는, 행렬의 행도 찾을 수 있습니다.
숫자형 행렬 A
를 만듭니다. A
를 변환한 후 변환을 해제하여 두 번째 행렬 B
를 얻습니다. 이 변환 과정에서 B
에 반올림 차분이 발생합니다.
A = [0.05 0.11 0.18; 0.18 0.21 0.29; 0.34 0.36 0.41; ...
0.46 0.52 0.76; 0.82 0.91 1.00];
B = log10(10.^A);
ismember
를 사용하여 A
의 행 중 B
에도 있는 행을 찾습니다. ismember
는 정확한 비교를 수행하여, 일부 행은 근소한 차이만 있을지라도 A
의 행 대부분이 B
의 구성원이 아님을 확인합니다.
lia = ismember(A,B,'rows')
lia = 5x1 logical array
0
0
0
0
1
ismembertol
을 사용하여 작은 허용오차로 행 비교를 수행합니다. ismembertol
은 허용오차 범위 내에 있는 행을 서로 같은 것으로 간주하여, A
의 모든 행이 B
의 구성원임을 확인합니다.
LIA = ismembertol(A,B,'ByRows',true)
LIA = 5x1 logical array
1
1
1
1
1
벡터에서 유사한 값의 평균
난수로 구성된 두 개의 벡터를 만든 다음, 허용오차를 사용하여 A
의 값 중 B
의 구성원이기도 한 값을 확인합니다. OutputAllIndices
를 true
로 지정하여 B
의 요소 중 A
의 대응하는 요소의 허용오차 범위 내에 있는 요소에 대한 모든 인덱스를 반환합니다.
rng(5)
A = rand(1,15);
B = rand(1,5);
[LIA,LocAllB] = ismembertol(A,B,0.2,'OutputAllIndices',true)
LIA = 1x15 logical array
1 0 1 0 1 1 1 1 1 1 0 1 1 1 0
LocAllB=1×15 cell array
{2x1 double} {[0]} {2x1 double} {[0]} {3x1 double} {2x1 double} {[4]} {3x1 double} {3x1 double} {2x1 double} {[0]} {2x1 double} {4x1 double} {2x1 double} {[0]}
B
의 요소 중 값 A(13)
의 허용오차 범위 내에 있는 요소의 평균값을 구합니다. 셀 LocAllB{13}
은 B
의 요소 중 A(13)
의 허용오차 범위 내에 있는 요소에 대한 모든 인덱스를 포함합니다.
A(13)
ans = 0.4413
allB = B(LocAllB{13})
allB = 1×4
0.2741 0.4142 0.2961 0.5798
aveB = mean(allB)
aveB = 0.3911
절대 허용오차 지정
기본적으로 ismembertol
은 abs(u-v) <= tol*DS
형식의 허용오차 테스트를 사용합니다. 여기서 DS
는 입력 데이터의 크기를 기반으로 하여 자동으로 스케일링됩니다. DataScale
옵션과 함께 사용할 다른 DS
값을 지정할 수 있습니다. 그러나 절대 허용오차(여기서 DS
는 스칼라임)는 입력 데이터의 크기를 기반으로 하여 스케일링되지 않습니다.
먼저, 거리가 eps
만큼 떨어져 있는 두 개의 작은 값을 비교합니다. tol
과 DS
를 지정하여 허용오차 내 방정식 abs(u-v) <= 10^-6
을 만듭니다.
x = 0.1;
ismembertol(x, exp(log(x)), 10^-6, 'DataScale', 1)
ans = logical
1
그런 다음 값의 크기를 늘립니다. 계산 exp(log(x))
의 반올림 오차는 값의 크기 특히, eps(x)
에 비례합니다. 두 개의 큰 값이 서로 거리 eps
만큼 떨어져 있을지라도 eps(x)
는 이제 훨씬 더 큽니다. 따라서 10^-6
은 더 이상 적합한 허용오차가 아닙니다.
x = 10^10;
ismembertol(x, exp(log(x)), 10^-6, 'DataScale', 1)
ans = logical
0
DS
의 디폴트 (스케일링된) 값을 사용하여 이 문제를 해결합니다.
Y = [0.1 10^10]; ismembertol(Y, exp(log(Y)))
ans = 1x2 logical array
1 1
열별로 DataScale 지정
임의의 2차원 점 집합을 만든 다음, ismembertol
을 사용하여 작은 쿼리 점 집합 B
와 유사한(허용오차 범위 내) x 좌표를 갖는 점을 세로 띠로 그룹화합니다. 다음 옵션을 ismembertol
에 사용할 수 있습니다.
점 좌표가
A
의 행과B
의 행에 있으므로ByRows
를true
로 지정합니다.OutputAllIndices
를true
로 지정하여A
의 점 중B
의 쿼리 점의 허용오차 범위 내에 있는 x 좌표를 갖는 모든 점에 대해 인덱스를 반환합니다.DataScale을
[1 Inf]
로 지정하여 x 좌표에 대한 절대 허용오차를 사용하고 y 좌표는 무시합니다.
A = rand(1000,2); B = [(0:.2:1)',0.5*ones(6,1)]; [LIA,LocAllB] = ismembertol(B, A, 0.1, 'ByRows', true, ... 'OutputAllIndices', true, 'DataScale', [1,Inf])
LIA = 6x1 logical array
1
1
1
1
1
1
LocAllB=6×1 cell array
{ 94x1 double}
{223x1 double}
{195x1 double}
{212x1 double}
{187x1 double}
{ 89x1 double}
A
의 점 중 B
의 각 쿼리 점의 허용오차 범위 내에 있는 점을 플로팅합니다.
hold on plot(B(:,1),B(:,2),'x') for k = 1:length(LocAllB) plot(A(LocAllB{k},1), A(LocAllB{k},2),'.') end
입력 인수
A
— 쿼리 배열(Query Array)
스칼라 | 벡터 | 행렬 | 다차원 배열
쿼리 배열로, 스칼라, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다. 입력 인수 A
와 B
는 비희소(Full) 형식이어야 합니다.
ByRows
옵션을 지정할 경우 A
와 B
는 열 개수가 같아야 합니다.
데이터형: single
| double
B
— 쿼리 배열(Query Array)
스칼라 | 벡터 | 행렬 | 다차원 배열
쿼리 배열로, 스칼라, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다. 입력 인수 A
와 B
는 비희소(Full) 형식이어야 합니다.
ByRows
옵션을 지정할 경우 A
와 B
는 열 개수가 같아야 합니다.
데이터형: single
| double
tol
— 비교 허용오차
양의 실수형 스칼라
비교 허용오차로, 양의 실수형 스칼라로 지정됩니다. ismembertol
은 입력 배열 A
와 B
의 최대 절댓값을 사용하여 tol
입력값을 스케일링합니다. 그런 다음 ismembertol
은 결과로 생성되는 스케일링된 비교 허용오차를 사용하여 A
의 요소 중 B
의 구성원이기도 한 요소를 확인합니다. 두 요소가 서로의 허용오차 범위 내에 있으면 ismembertol
은 이 두 요소를 같은 것으로 간주합니다.
abs(u-v) <= tol*max(abs([A(:);B(:)]))
인 경우 두 값 u
와 v
는 허용오차 범위 내에 있는 것입니다.
절대 허용오차를 지정하려면 tol
과 'DataScale'
이름-값 쌍을 모두 지정하십시오.
예: tol = 0.05
예: tol = 1e-8
예: tol = eps
데이터형: single
| double
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: LIA = ismembertol(A,B,'ByRows',true)
OutputAllIndices
— 출력 인덱스 유형
false
(디폴트 값) | true
| 0
| 1
출력 인덱스 유형으로, 'OutputAllIndices'
와 함께 false
(디폴트 값), true
, 0
, 1
중 하나가 쉼표로 구분되어 지정됩니다. ismembertol
은 숫자 0
을 false
로 해석하고 숫자 1
을 true
로 해석합니다.
OutputAllIndices
가 true
이면 ismembertol
함수는 두 번째 출력값 LocB
를 셀형 배열로 반환합니다. 이 셀형 배열은 B
의 요소 중 A
의 대응값이 허용오차 범위 내에 있는 모든 요소에 대한 인덱스를 포함합니다. 즉, LocB
의 각 셀은 A
의 값에 대응하며, 각 셀의 값은 B
에서의 위치에 대응합니다.
예: [LIA,LocAllB] = ismembertol(A,B,tol,'OutputAllIndices',true)
ByRows
— 행 비교 여부
false
(디폴트 값) | true
| 0
| 1
행 비교 여부로, 'ByRows'
와 함께 false
(디폴트 값), true
, 0
, 1
중 하나가 쉼표로 구분되어 지정됩니다. ismembertol
은 숫자 0
을 false
로 해석하고 숫자 1
을 true
로 해석합니다. A
와 B
에서 허용오차 범위 내에 있는 행을 찾으려면 이 옵션을 사용하십시오.
ByRows
가 true
인 경우:
ismembertol
은 각 열을 별도로 고려하여A
와B
의 행을 비교합니다. 따라서A
와B
는 열 개수가 동일한 2차원 배열이어야 합니다.A
의 대응하는 행이B
의 행의 허용오차 범위 내에 있는 경우,LIA
는 논리값1
(true
)을 포함합니다. 그렇지 않으면 논리값0
(false
)을 포함합니다.
all(abs(u-v) <= tol*max(abs([A;B])))
인 경우 두 개의 행 u
와 v
는 허용오차 범위 내에 있는 것입니다.
예: LIA = ismembertol(A,B,tol,'ByRows',true)
DataScale
— 데이터 스케일링
스칼라 | 벡터
데이터 스케일링으로, 'DataScale'
과 함께 스칼라 또는 벡터가 쉼표로 구분되어 지정됩니다. DataScale
을 숫자형 스칼라 DS
로 지정하여 허용오차 테스트를 abs(u-v) <= tol*DS
로 변경합니다.
ByRows
옵션과 함께 사용할 경우 DataScale
값은 벡터가 될 수도 있습니다. 이 경우 벡터의 각 요소는 A
의 대응하는 열에 대해 DS
를 지정합니다. DataScale
벡터의 값이 Inf
이면 ismembertol
은 A
의 대응하는 열을 무시합니다.
예: LIA = ismembertol(A,B,'DataScale',1)
예: [LIA,LocB] = ismembertol(A,B,'ByRows',true,'DataScale',[eps(1) eps(10) eps(100)])
데이터형: single
| double
출력 인수
LIA
— A
에 대한 논리형 인덱스
벡터 | 행렬
A
에 대한 논리형 인덱스로, A
의 요소(또는 행)가 B
의 구성원(허용오차 범위 내)인 경우 항상 논리값 1
(true
)을 포함하는 벡터 또는 행렬로 반환됩니다. 그렇지 않으면 LIA
는 논리값 0
(false
)을 포함합니다.
ByRows
옵션을 지정하지 않는 한 LIA
는 A
와 크기가 같습니다. 이 옵션을 지정할 경우 LIA
는 A
와 행 개수가 동일한 열 벡터입니다.
LocB
— B
에서의 위치
벡터 | 행렬 | 셀형 배열
B
에서의 위치로, 벡터, 행렬, 셀형 배열 중 하나로 반환됩니다. LocB
는 B
의 요소(또는 행) 중 A
에도(허용오차 범위 내) 있는 요소에 대한 인덱스를 포함합니다. LocB
는 A
의 요소가 B
의 구성원이 아닌 경우 항상 0
을 포함합니다.
OutputAllIndices
가 true
이면 ismembertol
은 LocB
를 셀형 배열로 반환합니다. 이 셀형 배열은 B
의 요소 중 A
의 대응값이 허용오차 범위 내에 있는 모든 요소에 대한 인덱스를 포함합니다. 즉, LocB
의 각 셀은 A
의 값에 대응하며, 각 셀의 값은 B
에서의 위치에 대응합니다.
ByRows
옵션을 지정하지 않는 한 LocB
는 A
와 크기가 같습니다. 이 옵션을 지정할 경우 LocB
는 A
와 행 개수가 동일한 열 벡터입니다.
확장 기능
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
'ByRows'
인수와'OutputAllIndices'
인수는 지원되지 않습니다.64비트 정수는 지원되지 않습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2015a에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)