??? Subscript indices must either be real positive integers or logicals

I have a for loop that gives the values of x(n) -- here n is an index.
d=0.5;
 
x(1)=1;
 
for n=2:10
x(n)= x(n-1)+d;
y(n)= log(abs(x(n)));
fprintf('y(%d)=%d', n, y(n))
end
I want the loop to also give the values of y(n) = log(abs(x(n))).
However, MATLAB doesn't seem to like this definition and I am presented with the error message: ??? Subscript indices must either be real positive integers or logicals.
What should I do to fix it?
Thanks.

2 Comments

Please post the relevant part of the code instead of describing it.
@Jan: I have posted the code.

Sign in to comment.

 Accepted Answer

matlab is ones based, not zeros... x(0) is an error
[edit]
works fine for me (added \n in fprintf statement)
d=0.5;
x(1)=1;
for n=2:10
x(n)= x(n-1)+d;
y(n)= log(abs(x(n)));
fprintf('y(%d)=%d\n', n, y(n))
end
y(2)=4.054651e-001
y(3)=6.931472e-001
y(4)=9.162907e-001
y(5)=1.098612e+000
y(6)=1.252763e+000
y(7)=1.386294e+000
y(8)=1.504077e+000
y(9)=1.609438e+000
y(10)=1.704748e+000

4 Comments

You should not use a %d format for a floating point number. Use %f or %g instead:
fprintf('y(%d)=%g\n', n, y(n))
@Walter and @proecsm:
I'm still getting
EDU>> testing
??? Subscript indices must either be real positive integers or
logicals.
Error in ==> testing at 7
y(n)=log(abs(x(n)));
 
7   y(n)=log(abs(x(n)));
With that code! Why o why? :((
do a clear; before running your script
@proecsm: Thanks, that worked!! :)

Sign in to comment.

More Answers (2)

Either n is not an integer greater than 0 or the symbols log or abs have been defined as variables, such that the built-in functions are shadowed. You can test this by using:
dbstop if error
and start the program. Then Matlab stops when the error occurs and you can check the symbols by:
which abs
which log
The command whos can be helpful also.

6 Comments

Thanks, Jan. However the code was working before the new variable y(n) was introduced, so it shouldn't be the n's. Also, I definitely haven't used either log or abs as variables. :(
when you issue
dbstop if error
and then run the function/script/code producing the error, what does n equal when it stops?
@Sean: It doesn't even start. :(
Does that mean that if you comment out the assignment to y(n) that your code will start? If that is the case then you would have gotten a very different error than the one you describe: it takes serious syntax errors to keep the code from running at all.
Please make things faster for yourself by posting the relevant code so that we are not left guessing about what is going on.
@Walter: Thanks, I have posted the code.

Sign in to comment.

x(n)= x(n-1)+d;
when n = 1, the first iteration of the loop, you're trying to reference x(1-1) a.k.a. x(0) which is undefined and the reason you're seeing the above error.

1 Comment

@Sean: Sorry, that was a typo, I have corrected it to 2 but the problem still persists.

Sign in to comment.

Products

Asked:

on 27 Dec 2011

Community Treasure Hunt

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

Start Hunting!