Matrizes geradas por dois pontos com ou sem colchetes no Matlab

Matrizes geradas por dois pontos com ou sem colchetes no Matlab

Pelo que sei, os arrays a:d:be [a:d:b]são exatamente a mesma coisa. Por exemplo,

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

No entanto, essas duas expressões dão resultados diferentes:

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

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

Por que?

(Estou usando Matlab R2017b 9.3.0.713579)

Responder1

Uma boa resposta veio de Rik Wisselink neste fórum: https://www.mathworks.com/matlabcentral/answers/391046-colon-generated-arrays-with-or-without-brackets

A razão para isso é a ordem inesperada em que esta afirmação é avaliada:

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

Adicionar colchetes força o agrupamento antes e depois do operador dois pontos (parênteses também funcionariam).

Stephen Cobeldick acrescenta que isso se explica pelo fato de +ter uma prioridade maior que :.

Steven Lord também comenta que a transição da linha 4 para a 5 é explicada na documentação:

Se você especificar matrizes não escalares, o MATLAB interpretará j:i:k como j(1):i(1):k(1).

informação relacionada