Why find cannot handle this very simple task?
1 view (last 30 days)
Show older comments
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 Comments
Answers (2)
Stephan
on 19 Apr 2021
You are dealing with doubles, they are not precisly 0.077 - use round:
X = -0.1:.001:.25;
find(round(X,3) == .077)
3 Comments
Steven Lord
on 27 Apr 2021
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
on 27 Apr 2021
Welcome to the world of calculations with numbers represented with limited precision.
0 Comments
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!