find is not matching a value of 1 in an array

3 vues (au cours des 30 derniers jours)
Jeremy Quandt
Jeremy Quandt le 19 Mar 2020
Commenté : Jeremy Quandt le 19 Mar 2020
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)]

Réponse acceptée

Adam Danz
Adam Danz le 19 Mar 2020
Modifié(e) : Adam Danz le 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))

Plus de réponses (1)

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

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by