Using find in a for loop error

2 views (last 30 days)
Serena Campbell
Serena Campbell on 12 Feb 2018
Answered: Serena Campbell on 12 Feb 2018
I have a large matrix with values of "period" p - I am testing this part of my code where I find what row p belongs to in order to access the corresponding row later in my code. However for some reason this will only run three times (so until cct=3) before i get the error: Assignment has more non-singleton rhs dimensions than non-singleton subscripts; error position1(cct,1)=find(p==pp)
*
p=AAA(1:end-1,1); %%%returns 10000x1 matrix of values 0 to 1 in 0.001 steps
cct=1;
for pp =0.1:0.1:0.5;
position1(cct,1)=find(p==pp);
position2=position1(cct,1);
valuep=p(position2,1); %%%to check it is the correct value
cct=cct+1;
end*
  1 Comment
Serena Campbell
Serena Campbell on 12 Feb 2018
Edited: Serena Campbell on 12 Feb 2018
So - I put the output into a cell and a strange thing happens - it always skips the third value (no matter what the value is!) and continues nicely after? (see attached output)
p=AAA(1:end-1,1);
cct=1;
for pp =0.4:0.1:1;
test(cct,1)=cct;
valuepp(cct,1)=pp;
x{cct,1}=find(p==pp);
%
cct=cct+1;
end

Sign in to comment.

Accepted Answer

Matt J
Matt J on 12 Feb 2018
Edited: Matt J on 12 Feb 2018
You would need to give us AAA in a .mat file to be certain. Most likely, however, pp is not close enough to 0.6 (due to floating point error) to match a value in AAA. Use a tolerance:
x{cct,1}=find(abs(p-pp)<smallnumber);

More Answers (1)

Serena Campbell
Serena Campbell on 12 Feb 2018
I worked it out! It must have been a precision problem, as this fixed it:
https://uk.mathworks.com/matlabcentral/answers/17534-find-function-precision-problem

Categories

Find more on Loops and Conditional Statements 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!