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 =
Here are alternatives.
% find the value of 1
idx = find(ismembertol(k,1));
% 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 :


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




Community Treasure Hunt

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

Start Hunting!