MATLAB: Strange problem with function ‘find’

findMATLABprecision tolerance

Hello. I have a strange problem with function find. I have this function in for loop and I use it eg. 50 times. This function not always find what I am looking for although if I run this outside the loop it will find my value.
Code:
for i=1:n,
fid=fopen(names(i,1).name);
spec=cell2mat(textscan(fid,'%f %f'))';
fclose(fid);
X=spec(1,:);
Y=spec(2,:);
for j=1:size(setX,1),
x=setX(j,1);
[M,N]=find(X==x); - problem sometimes in this place
if(isempty(M))
DataX(j,i)=0;
else
DataX(j,i)=Y(M,N);
end
end
end
Also I will show you the Data X file (in this place Data Y but it's the same problem – same data).
You can see that in 30 ,33 and 37 loop it didn't find the X value but this value exist and the pattern is the same as others. What it the problem?

Best Answer

Use a tolerance to allow for floating point errors,
[M,N]=find(abs(X-x)<=somethingsmall)
where "somethingsmall" is small but >0