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?

回答(2 个)

Stephan
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 个评论
Mr M.
Mr M. 2021-4-27
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 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))
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

请先登录,再进行评论。


Jan
Jan 2021-4-27
Welcome to the world of calculations with numbers represented with limited precision.

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by