Azzera filtri
Azzera filtri

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

3 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

bym
bym il 27 Dic 2011
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 Commenti

Accedi per commentare.

Più risposte (2)

Jan
Jan il 27 Dic 2011
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 Commenti

Accedi per commentare.


Sean de Wolski
Sean de Wolski il 27 Dic 2011
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.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by