Why find cannot handle this very simple task?
Afficher commentaires plus anciens
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?
Réponses (2)
Stephan
le 19 Avr 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 commentaires
Mr M.
le 27 Avr 2021
Mr M.
le 27 Avr 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
le 27 Avr 2021
0 votes
Welcome to the world of calculations with numbers represented with limited precision.
Catégories
En savoir plus sur Matrix Indexing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!