eq() and == failing to find matches in generated array.

1 次查看(过去 30 天)
I have generated the following vector:
x = -2:0.1:5;
But now when trying to mask the location of various values it seems to fail to find entries that are shown in memory when viewed manually. E.g.
max(x==1.1) % returns 1 as expected.
max(eq(x,1.1)) % returns 1 as expected.
max(x==1.8) % returns 0 but expected 1.
max(eq(x,1.8)) % returns 0 but expected 1.
x(39) % returns 1.8000 as a sanity check to prove it is there.
Im guessing this is some sort of floating point precision issue - but don't know how to avoid it in a reliable way as I thought that was the point of eq().
Have tried to make this example case as simple as possible - so sorry if it seems a little random.
  1 个评论
Jonathan G-H-Cater
Jonathan G-H-Cater 2021-3-10
Here is another one that fails... but now I really am confused:
max((abs(x-1.8)<eps)) % returns 0
max((abs(x-1.1)<eps)) % returns 1
Honestly expected that to solve precision issues.

请先登录,再进行评论。

采纳的回答

David K.
David K. 2021-3-10
You are right that it is floating point precision. There are many ways to deal with this and your comment shows one of them with a slight adjustment:
max((abs(x-1.8)<=eps)) % returns 1
You can also use a function called ismembertol and do it as such:
max(ismembertol(x,1.8,eps)); % also returns 1

更多回答(0 个)

类别

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

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by