find is not matching a value of 1 in an array

7 views (last 30 days)
I am unable to match a value of 1 with find when checking an array produced by linspace. Is this as expected behavior?
% Create our k samples.
k = linspace(0.1, 2.0, 20)
% Find indexes.
[find(k==0.5) find(k==1.0) find(k==1.5)]

Accepted Answer

Adam Danz
Adam Danz on 19 Mar 2020
Edited: Adam Danz on 19 Mar 2020
This is due to roundoff error.
Here's a demo showing the roundoff error.
k = linspace(0.1, 2.0, 20); % 1 is in positon 10
k(10) - 1
ans =
-1.1102e-16
Here are alternatives.
% find the value of 1
idx = find(ismembertol(k,1));
or
% find the value of 1
[~, idx] = min(abs(k-1))

More Answers (1)

Loren Shure
Loren Shure on 19 Mar 2020
You are running into an issue of floating point arithmetic. You might use ismembertol : mathworks.com/help/matlab/ref/ismembertol.html

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!