Matrices generadas por dos puntos con o sin corchetes en Matlab

Matrices generadas por dos puntos con o sin corchetes en Matlab

Por lo que puedo decir, las matrices a:d:by [a:d:b]son exactamente lo mismo. Por ejemplo,

>> [1:3] == 1:3
ans =
  1×3 logical array
   1   1   1

Sin embargo, estas dos expresiones dan resultados diferentes:

>> [1:3]' + 1:3
ans =
     2     3

>> [1:3]' + [1:3]
ans =
     2     3     4
     3     4     5
     4     5     6

¿Por qué?

(Estoy usando Matlab R2017b 9.3.0.713579)

Respuesta1

Una buena respuesta vino de Rik Wisselink en este foro: https://www.mathworks.com/matlabcentral/answers/391046-colon-generated-arrays-with-or- without-brackets

La razón de esto es el orden inesperado en el que se evalúa esta declaración:

[1:3]' + 1:3  
([1:3]' + 1):3  
([1;2;3]+1):3  
[2;3;4]:3  
2:3  
[2,3]  

Agregar los corchetes fuerza la agrupación antes y después del operador de dos puntos (los paréntesis también habrían funcionado).

Stephen Cobeldick añade que esto se explica por el hecho de que +tiene mayor prioridad que :.

Steven Lord también comenta que la transición de la línea 4 a la 5 se explica en la documentación:

Si especifica matrices no escalares, MATLAB interpreta j:i:k como j(1):i(1):k(1).

información relacionada