Why find cannot handle this very simple task?

1 visualización (últimos 30 días)
Mr M.
Mr M. el 19 de Abr. de 2021
Respondida: Jan el 27 de Abr. de 2021
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?

Respuestas (2)

Stephan
Stephan el 19 de Abr. de 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 comentarios
Mr M.
Mr M. el 27 de Abr. de 2021
I can not undersatnd: if .077 is good, than -0.1:.001:.25 is why not good? since elements of this vector is -0.100+0.001+0.001+etc., and each term is rounded to 3th order
Steven Lord
Steven Lord el 27 de Abr. de 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))
ans = 0.0770
Or work with integer values and convert to non-integer values as needed:
X2 = -100:250;
X2(X2 == 77)/1000
ans = 0.0770
Or use ismembertol which tries to choose a good "close enough" tolerance.
X(ismembertol(X, 0.077))
ans = 0.0770

Iniciar sesión para comentar.


Jan
Jan el 27 de Abr. de 2021
Welcome to the world of calculations with numbers represented with limited precision.

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by