find is not working in a loop, it skips numbers

4 vues (au cours des 30 derniers jours)
Katerina F
Katerina F le 24 Fév 2025
Commenté : Katerina F le 24 Fév 2025
Hello,
I am using a loop with a "find" to indentify the rows in the third column that have the same number (e.g. 0.75 etc), then I select which to chose based on a criterio. In some cases for example 0.82, 0.93 the function find returns a zero array instead of an array with ones at the locations of the number. Depending on the limits of the initial range ("sisto" in the code below) it skips different number. I tried to correct using the mask instead of the find but I am still having the same results. Could you please help me with this? (I attach the text file with the input matrix) Thanks.
load('HP4140AT5OR40DOS.txt');
LINE=HP4140AT5OR40DOS;
x=LINE(:,3);
sisto = 0.60:0.01:1;
s=size(sisto,2)
for i=1:s
sisto(i)
find = (x==sisto(i));
MA=LINE(find,:)
dast=MA(:,5); %the storage days
ouf=abs(40-dast)% how close they are to 30
[minValue, minIndex] = min(ouf)
point=MA(minIndex,:)%the point I select for this wind contribution
end
  2 commentaires
Stephen23
Stephen23 le 24 Fév 2025
"find is not working in a loop, it skips numbers"
FIND is working. Your numbers are different.
"Could you please help me with this?"
Do not use EQ to compare exact equality of binary floating point numbers. Always compare using a tolerance, e.g.:
tol = 1e-5; % select this value depending on the data
abs(A-B)<tol
Steven Lord
Steven Lord le 24 Fév 2025
If you're using a release that has it, use the isapprox function.

Connectez-vous pour commenter.

Réponse acceptée

Torsten
Torsten le 24 Fév 2025
Modifié(e) : Torsten le 24 Fév 2025
Never test two double precision numbers for equality. Because of floating point arithmetic, they will almost always be classified as different.
Replace
find = (x==sisto(i));
by
find = abs(x-sisto(i))<1e-6;
And better don't use the name "find" for the variable. You overwrite the internal MATLAB function "find":
  1 commentaire
Katerina F
Katerina F le 24 Fév 2025
Thank you. It works. I understand now.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by