Why find cannot handle this very simple task?
조회 수: 1 (최근 30일)
이전 댓글 표시
X = -0.1:.001:.25;
find(X == .077)
I get the following:
ans = 1×0 empty double row vector
However X(178) = 0.077. How to get back index 178?
댓글 수: 0
답변 (2개)
Stephan
2021년 4월 19일
You are dealing with doubles, they are not precisly 0.077 - use round:
X = -0.1:.001:.25;
find(round(X,3) == .077)
댓글 수: 3
Steven Lord
2021년 4월 27일
I wouldn't use round here. Decide how close is "close enough" and use that as the tolerance.
X = -0.1:0.001:0.25;
closeEnough = 1e-8;
X(find(abs(X-0.077) < closeEnough))
Or work with integer values and convert to non-integer values as needed:
X2 = -100:250;
X2(X2 == 77)/1000
Or use ismembertol which tries to choose a good "close enough" tolerance.
X(ismembertol(X, 0.077))
Jan
2021년 4월 27일
Welcome to the world of calculations with numbers represented with limited precision.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!