Filter löschen
Filter löschen

find is not matching a value of 1 in an array

4 Ansichten (letzte 30 Tage)
Jeremy Quandt
Jeremy Quandt am 19 Mär. 2020
Kommentiert: Jeremy Quandt am 19 Mär. 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)]

Akzeptierte Antwort

Adam Danz
Adam Danz am 19 Mär. 2020
Bearbeitet: Adam Danz am 19 Mär. 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))

Weitere Antworten (1)

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

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by