# Subscript indices must either be real positive integers error? Can't figure out why

1 view (last 30 days)
Ryan Kubik on 14 Jun 2016
Edited: Walter Roberson on 14 Jun 2016
I am trying to analyze a BW image,
[l w]=size(S4);
for i=1:w
y=(Y(1)+((Slope)*(i)));
h(i)=sum(S4(i,[0:y]));
end
Does anyone know what is wrong with my code? S4 is a 780x4608 matrix, Slope is an integer,

#### 1 Comment

This line could evaluate to anything, from the information you have given:
y=(Y(1)+((Slope)*(i)));
Certainly there is no guarantee that it will provide a valid index into S4.

Moe_2015 on 14 Jun 2016
Edited: Moe_2015 on 14 Jun 2016
It is because of this line:
h(i)=sum(S4(i,[0:y]));
You cannot access column 0 of a matrix in MATLAB. MATLAB indices start from 1.

Ryan Kubik on 14 Jun 2016
Interesting! Now that I fixed that, I get an error that "Index exceeds matrix dimensions" Yet it seems all my dimensions are in order. Wanna try to go 2/2?!
Moe_2015 on 14 Jun 2016
One thing I see right off the bat is you define i=1:w (so this is 1:4608). However in:
h(i)=sum(S4(i,[0:y]));
You are using i to loop through the rows of S4. S4 only has 780 rows not 4608 (the number of columns). I don't know what you are trying to accomplish here but you need to put i in your column index if you want the dimension to not error out. Alternatively, maybe what you want to do is define i=1:l. Again, I don't know what you are trying to accomplish here so try either one based on what you need.
Also, take a look at what Adam commented on your question. I don't know the values of Y(1) or Slope*i but that may also cause problems getting a value of y that is greater than the number of columns you have in S4. However, I do not know for sure and maybe your numbers work out but in any case, the way you have the code set up, "i" is causing the problem above.