Index exceeds matrix dimensions. I can't figure out what I'm doing wrong, please help.
Show older comments
here is my code:
if true
S=[];
n=2;
w=abs(10^6);
v=1:998;
u= -1:1;
for a = -2 : 0.04 : 2
for b = -2 : 0.04 : 2
vec=[0;0];
n= 3: 1000; %n=1 and n=2 both equal 0
v(n+1)= a*v(n) + b*v(n-1) + u(n);
c= a + 1i*b; %using i instead of j
while (v(n+1) < w)
u= 1-2*rand(1);
v=vec;
n=n+1;
end %end while loop
if v(n+1) < w
S= [S c];
else
S=0;
end %end if statement
end %end b= for loop
end %end a= for loop
T=plot(S, '*');
axis(T,'square')
end
I don't know what this is supposed to plot cause i keep getting an "Index exceeds matrix dimensions." error. My TA didn't explain squat about what needed to be done and I really don't understand any sort or programming(even though I try my best it just doesn't click in my brain). An explanation would also be appreciated if anyone can help me. Thanks a bunch.
Answers (1)
Star Strider
on 13 Feb 2015
1 vote
We can’t figure out what you’re doing wrong either, because you haven’t told us what line is throwing the error, the size of the array you are indexing into, or the value of the index in the line that is throwing the error.
We’re very good at MATLAB, but we’ve proven over time to be absolutely hopeless mind-readers.
12 Comments
Savanna
on 13 Feb 2015
Star Strider
on 13 Feb 2015
MATLAB will tell you what line is throwing the error.
Please copy the entire red error message, including the line that is throwing the error. MATLAB should produce all this information, but it will at the very least provide you with the line number. That will allow you to find the line and copy it to your Question or Comment.
Please also provide the other information, such as the size of the array you are indexing, and the value of the index when your code throws the error.
Star Strider
on 13 Feb 2015
Edited: Star Strider
on 13 Feb 2015
Before your for loop, add this line:
S = [];
If you know how large your ‘S’ array will be (my guess is (1x10201), and since it seems to be a vector, preallocate it as:
S = nan(1,10201);
again before the loop. Then subscript the individual elements as you add them to ‘S’, such as:
S(k1) = c;
You will have to figure out how to calculate ‘k1’. The easiest way would simply be to use a counter and not worry about calculating it from the other indices. The errors and warnings should then go away.
Savanna
on 13 Feb 2015
Star Strider
on 13 Feb 2015
It’s changing size at every iteration because you decided to not preallocate ‘S’. Don’t worry. If your code runs and gives the results you expect, then the only problem is that it will be a bit slower and less efficient than if you had preallocated ‘S’.
Savanna
on 13 Feb 2015
Star Strider
on 13 Feb 2015
My pleasure.
What line is throwing the error? We need to see the line itself, not simply the line number.
Savanna
on 13 Feb 2015
Star Strider
on 13 Feb 2015
What is the size of ‘S’, and what is the value and size of of ‘c’ when the error occurs?
Savanna
on 13 Feb 2015
Star Strider
on 13 Feb 2015
That doesn’t mean anything to me. To fit in ‘S’ as you’ve written your code (at least as I understand it), ‘c’ must be a scalar. It cannot be a vector.
Categories
Find more on Matrices and Arrays 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!