HELP : Subscript indices must either be real positive integers or logicals - AGAIN

1 visualización (últimos 30 días)
I need your help to solve the problem of subscript index that must either be positive integer or logical. Can any one help to correct this ?
A = magic(5);
M1 = size(A,1);
M2 = size(A,2);
E = [5 8 20];
for x = 1:M1
for y = 1:M2
if A(A(x,y) == E)
A(x-1,y) = 5
end
end
end
Thank you!

Respuesta aceptada

Adam
Adam el 11 de En. de 2016
By including 'again' in the title I hope that you are learning from previous solutions and that this is a different type of cause to your previous such problems.
The line
A(x-1,y) = 5
fails first time round the loop because x is 1 so x-1 is 0 which is not a valid array index (this is what the error message tells you - it must be a real positive integer or a logical - 0 is neither of those).
How to fix it depends on your intent. Starting your for loop indexed from 2 instead of 1 would remove the error but may not be the solution you want.
  6 comentarios
Adam
Adam el 12 de En. de 2016
Editada: Adam el 12 de En. de 2016
for x = 2:(M1-1)
for y = 2:(M2-1)
for k = 1:length(E)
if A(A(x,y) == E(k))
A(x-1,y) = E(k);
A(x+1,y) = E(k);
A(x,y-1) = E(k);
A(x,y+1) = E(k);
end
end
end
end
should probably do the job, though I'm sure there are neater ways.
Gobert
Gobert el 13 de En. de 2016
The above code did not unfortunately yield the results expected. See the results, it yielded:
A =
17 5 5 5 15
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
11 5 5 5 9
The expected results are shown below:
A =
17 5 1 8 15
5 5 5 20 16
4 5 20 20 20
10 12 19 20 3
11 18 25 2 9

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by