O MATLAB é especializado no trabalho com vetores e matrizes de diferentes ordens.

A ordem de uma matriz refere-se ao seu número de linhas e colunas.

É geralmente apresentada na notação m×n, onde m é o número de linhas e n é o número de colunas. ... Assim, a matriz [ 1 , 2 , 3 ; 4 , 5 , 6] é de ordem 2×3.

Escalares são vetores unitários de ordem 1.

Vetores são matrizes unidimensionais de ordem 1xn e ordem nx1.

Matrizes bidimensionais são sequências multidimensionais de elementos de ordem mxn, com m > 1 e n > 1.

Matrizes tridimensionais são sequências multidimensionais de elementos de ordem mxnxp, com m > 0 , n > 0 e p > 0. A dimensão p é chamada de página.

Matrizes com mais de 3 dimensões não têm um nome específico, são matrizes multidimensionais com páginas de páginas, não serão aprofundadas neste curso.

Escalares

Escalares são valores unitários de diferentes  tipos: numéricos inteiros ou reaiscaracteres, lógicos, etc.

Os valores 1, 'MATLAB' e true são escalares.

Internamente o MATLAB armazena todos os valores declarados como matrizes, no caso dos escalares como uma matriz unitária (unidimensional de ordem 1) com uma linha e uma coluna.

Ao atribuirmos o valor 1 à variável x:

>> x = 1
x = 1

digitando whos x, obtemos:

>> whos x
Variables visible from the current scope:
variables in scope: top scope
   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        x           1x1                          8  double
Total is 1 element using 8 bytes

onde observamos  que o atributo 'Size' tem valor '1x1', x sendo portanto um vetor unidimensional contendo o valor escalar.

Vetores e Matrizes

Matrizes são sequências de elementos concatenados, de diferentes ordens: 1x1 (ou 1), 1x2 (ou 2), 3x3 (ou 3), 1x2, 2x1, 1x3, 2x3, 3x1, 3x2, e assim por diante.

Ou seja, matrizes formam linhas e colunas de valores.

São classificadas como unitárias, unidimensionais e multidimensionais..

As matrizes unidimensionais  são sequências com apenas uma linha (1xn) ou uma coluna (nx1), sendo também referidas como vetores. Com n = 1 podem ser referida como matrizes unitárias ou vetores unitários. É o caso dos valores escalares.

Matrizes de ordem mxn são bidimensionais, com m > 0 e n > 0.

Matrizes de ordem mxnxp são tridimensionais, com m > 0, n > 0 e p > 0. A dimensão p é referida como dimensão de páginas na literatura da linguagem.

As matrizes são declaradas com a concatenação de valores, existem diferentes comandos para isso.

O modo mais básico de declaração de matrizes dispõe os valores separados por espaço '  ' ou vírgula ',' entre colchetes '[ ]'.

Concatenação de matrizes com colchetes '[ ]'

Para o MATLAB , os colchetes '[ ]' são operadores de concatenação na declaração de matrizes.

Os valores entre '[ ]' são concatenados como elementos, resultando numa matriz de dimensões apropriadas.

Estes valores podem ser escalares, vetores, matrizes, resultados de operações ou da chamada de funções, etc.

Os símbolos abre-colchete '[' e fecha-colchete ']' iniciam e encerram, respectivamente, a concatenação de valores como elementos em sequência no vetor ou matriz, estando separados por espaço ' ', vírgula ',' ou ponto-e-vírgula ';'.

Colunas são separadas com espaço '   ' ou virgula ',' e linhas são separadas com ';'.

Vetores e matrizes são sequências em linhas e colunas de escalares, vetores e matrizes.

É normal vetores serem referidos como matrizes unidimensionais ou simplesmente matrizes.

Vetores são portanto matrizes de uma dimensão, seja no sentido vertical, com linhas de elementos em uma coluna, ou no sentido horizontal, com colunas de elementos em uma linha.

A concatenação de elementos em um vetor pode ser no sentido das linhas ou das colunas.

Concatenação em colunas com '[ ]'

Abaixo a variável x recebe o vetor de ordem 1x2 resultante da concatenação dos escalares 1 e 2 em colunas na linha , separados por espaço ' ',

>> x = [1 2]
x = 1 2

As linhas e colunas das matrizes são sempre iniciadas na posição 1 e têm n elementos (que podem ser matrizes, sempre são) em que a última posição é a enésima. 

O comando size retorna o número de elementos em uma matriz. Usando a variável x declarada acima:

>> size(x)
ans = 2

Podemos concatenar não apenas escalares mas também vetores e matrizes.

>> x = [1 2 3]
x = 1 2 3

>> y = [4 5 6]
y = 4 5 6

>> z = [x y]
z = 1 2 3 4 5 6

Concatenação de linhas com '[ ]'

Abaixo a variável y recebe o vetor de ordem nx1 resultante da concatenação no sentido vertical (das linhas) dos escalares 3, 4 e 5. O símbolo ';' entre os valores declarados dentro de '[ ]' armazena os valores passando para próxima linha na declaração da matriz).

Com MATLAB elementos declarados separados por ponto-e-vírgula ';' dentro de colchetes são organizados em linhas:

>> x = [1;2]
x =
   1
   2

>> y = [3;4;5]
y =
   3
   4
   5

Podemos concatenar não apenas escalares mas também matrizes em linhas. Usando as matrizes x e y declaradas acima:

>> z = [x;y]
z =
   1
   2
   3
   4
   5
   6

Concatenação por faixa com ':'

Matrizes podem ser declaradas com o símbolo dois-pontos ':' separando dois argumentos (valores inicial e final da matriz) ou 3 argumentos (valores inicial, da variação e final da matriz)

Concatenação por faixa com 2 argumentos separados por '':'

A concatenação por faixa com 2 argumentos utiliza os operadores de concatenação '[' e ']' com os valores inicial e final dos elementos da matriz, variando de 1. 

Abaixo atribuimos na variável x o vetor de 10 posições criados com o valores inicial = 1 e final = 10.

>> x = [1:10]
x = 1 2 3 4 5 6 7 8 9 10

Duas matrizes criadas por concatenação de faixa podem ser concatenadas em uma nova matriz separadas por ';'.

>> matriz = [[1:3];[4:5]];
matriz = 
   1 2 3
   4 5 6

Suponhamos um vetor de 10 posições com elementos com valor igual ao da posição que ocupam no vetor.

Com MATLAB declaramos de forma direta a criação da variável vetor recebendo o resultado do vetor declarado:

>> vetor = [1:10]
vetor = 1,2,3,4,5,6,7,8,9,10

Mas para criamos o mesmo vetor com o MATLAB, precisamos simplesmente do valores inicial e do final para o vetor ser criado com elementos com valor preenchido de acordo com a declaração instruída.

>> vetor = [1:10]
vetor = 1 2 3 4 5 6 7 8 9 10

Neste momento é interessante fazer a observação sobre a comparação entre a utilização do ponto-e-vírgula (;) com a vírgula (,)  na declaração de matrizes, entre colchetes ([ ]) , pois vírgulas são utilizadas para separar colunas, enquanto pontos-e-vírgulas são utilizados para separar linhas em vetores e matrizes.

Com MATLAB instruímos simplesmente:

>> vetor = [1:3]
vator = 1 2 3
>> matriz = [[1:3],[4:5]);
matriz = 1 2 3 4 5 6

Com vírgula separando os elementos [1:3] e [4:6] é criado um vetor correspondente a [1:6], pois seguindo a interpretação da esquerda para direita, o interpretador MATLAB, após criar [1:3] , encontrando  a vírgula, procede a criação do vetor [4:66] como instruido e a concatenação dos elementos na variável matriz.

No trabalho com vetores - chamemos trabalho, em geral,  o conjunto de instruções fornecidas em busca de resultados - iremos precisar vetores - e matrizes - das mais diferentes formas.

Não apenas de vetores de 1 a n variando de 1 iremos necessitar utilizar em nossas operações, precisaremos de mais, muito mais que isso apenas. 

Concatenação por faixa com 3 argumentos separados por '':'

>> x = <primeiro>:<incremento>:<ultimo>

Cria um vetor cujo primeiro elemento tem valor iggual <primeiro>, os seguintes são obtidos somando o valor de <incremento> ao valor do próximo elemento,  até o valor incrementado ficar maior ou igual ao valor de <ultimo>

É possível construir vetores associando as várias técnicas que acabamos de descrever. Considere o exemplo a seguir:

>> a = 1:5;
>> b = 1:2:9;
>> c = [b a]
c = 1 3 5 7 9 1 2 3 4 5
>> d =[a(1:2:5) 1 0 1]
d = 1 3 5 1 0 1

A concatenação por faixa com 3 argumentos utiliza os operadores de concatenação '[' e ']' com os valores inicial, de variação e final dos elementos da matriz. 

Abaixo a variável x recebe o vetor de 11 posições criados com os valores inicial = 0 e final = 1 e variação de 0.1.

>> x = [0:0.1:1]
x = 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Observe que o número de elementos é 11, pois o cálculo do número de elementos = (valor inicial - valor final) / variação + 1. No caso acima size(x) = ((1-0) / 0.1) + 1 = 11

Vimos que no MATLAB podemos declarar vetores entre colchetes separados por branco. Suponhamos a sequência de 10 elementos variando de 0 a pi(π).

>> x = [0 0.1*pi 0.2*pi 0.3*pi 0.4*pi 0.5*pi 0.6*pi 0.7*pi 0.8*pi 0.9*pi pi]
x = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416

A forma apresentada acima não é a mais direta para criação desse vetor:

>> x = [0:0.1*pi:pi]
x = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416

Na declaração de vetores com colchetes '[ ]' separados por dois-pontos ':' podemos usar 2 ou 3 argumentos.

Com 2 argumentos declaramos os valores inicial e final, assumindo a variação de 1, e com 3 argumentos declaramos os valores inicial, de variação e final.

Ainda podemos realizar a declaração do vetor como os 2 anteriores:

>> x = pi*[0:0.1:pi]
x = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416

Finalmente apresentamos o exemplo retornando na variável y o seno dos elementos do vetor x passados argumento da função, sendo y um vetor com a mesma dimensão  de x e elementos contendo o valor do seno(x) , com as letras x e y representando os eixos no gráfico 2D.

>> y = sin(x)
y = 0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000

Acesso aos elementos de matrizes

Acessamos os elementos das matrizes com o comando <matriz>(linha,coluna) onde <matriz> é a matriz criada dinamicamente ou em uma variável e linha e coluna especificam a posição do elemento da matriz retornado.

>> A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]
A = 
    1 2 3
    4 5 6
    7 8 9

>> A(1,1)
ans = 1

>> A(2,2)
ans = 5

>> A(3,3)
ans = 9

Este comando é funcional inclusive para escalares pois a ordem mínima das matrizes na MATLAB é mxn e  escalares são matrizes de ordem 1x1 (m=1 e n=1).

>> A = 7

>> A(1,1)
ans = 7

Com um argumento em <matriz>(n) é retornado o elemento na posição da linha correspondente ao modulo da divisão de n pelo número de linhas menos um, com a coluna correspondente ao resto inteiro da divisão de n pelo número de linhas menos um.

Ou seja, conta-se da primeira linha até a última e da primeira coluna até a última a partir de 1 até o valor de n ser alcançado.

>> A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]
A = 
    1 2 3
    4 5 6
    7 8 9

>> A(6)
ans = 8

>> m = 
A = 7

>> A(1,1)
ans =  7

Indexação de matrizes com matrizes

Uma matriz pode ser indexada também por outra matriz, cujos elementos indicam as posições desejadas.

>> A = [1:5 ; 6:10 ; 11:15 ; 16:20 ; 21:25 ]
A = 
    1  2  3  4  5
    6  7  8  9  10
    11 12 13 14 15
    16 17 18 19 20
    21 22 23 24 25

>> A(1,[1,3,5]) % retorna o vetor dos valores das colunas 1, 3 e 5 da linha 1 de elementos
ans = 1 3 5


>> A(2,[1,3,5]) % retorna o vetor dos valores das colunas 1, 3 e 5 da linha 2 de elementos
ans = 6 8 10


>> A(5,[1,3,5]) % retorna o vetor dos valores das colunas 1, 3 e 5 da linha 5 de elementos
ans = 21 23 25

>> A([1,3,5],1) % retorna o vetor dos valores das linhas 1, 3 e 5 da coluna 1 de elementos
ans =
    1
    11
    21

>> A([1,3,5],2) % retorna o vetor dos valores das linhas 1, 3 e 5 da coluna 2 de elementos
ans = 
     3
     13
     23


>> A([1,3,5],5) % retorna o vetor dos valores das linhas 1, 3 e 5 da coluna 5 de elementos
ans =
     5
     15
     25

Exibe do n_i-ésimo elemento até o n_f-ésimo elemento do vetor x.

O comando <matriz>(:end) exibe do n_i-ésimo elemento ao último elemento do vetor x.

O comando <matriz>(::) exibe os elementos cujos índices estão em [n_i,n_f], começando pelo elemento de índice n_i e usando o incremento inc. Note que o último elemento exibido pode não ser o elemento de índice n_f.

>> x(<n_i>:end)

Exibe do n_i-ésimo elemento ao último elemento do vetor x.

x<n_i>:<inc>:<n_f>)

Exibe os elementos cujos índices estão em [n_i,n_f], começando pelo elemento de índice n_i e usando o incremento inc.

Note que o último elemento exibido pode não ser o elemento de índice n_f.

O operador de concatenação (colchetes) permite exibir os elementos de um vetor na ordem que desejarmos, bem como repetindo elementos. Considere o exemplo a seguir:

>> x = (10:10:100)
x = 10 20 30 40 50 60 70 80 90 100
>> x([8 2 5 1 1 1])
ans = 80 20 50 10 10 10

 [8 2 5 1 1 1] é um vetor que é usado para indexar os elementos de x que desejamos exibir.

Note que podemos repetir índices.

É preciso que os índices sejam válidos.

Se o usuário tentar exibir elementos cujos índices não são inteiros, o MATLAB arredonda os índices.

Se os valores dos índices arredondados forem válidos, o MATLAB exibe os elementos correspondentes e emite um warning; se não forem, o MATLAB retorna uma mensagem de erro.

>> x = (10:10:100)
x = 10 20 30 40 50 60 70 80 90 100
>> x(3.2)
Warning: Subscript indices must be integer values.
ans = 30
>> x(10.9)
Warning: Subscript indices must be integer values.
??? Index exceeds matrix dimensions.

Acesso a linhas

Para retornarmos uma linha inteira de colunas utilizamos <matriz>(n,:) onde n é o número da linha

>> A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]
A =
    1 2 3
    4 5 6
    7 8 9

>> A(1,:) % retorna todas as colunas da linha 1
ans = 1 2 3


>> A(3,:) % retorna todas as colunas da linha 2
ans = 4 5 6


>> A(3,:) % retorna todas as colunas da linha 3
ans = 7 8 9


>> A([1,3],:) % retorna todas as colunas das linhas 1 e 3
ans =
     1 2 3
     7 8 9

Expansão escalar

Considere o seguinte exemplo:

>> A = [1 2; 3 4];
>> 1./A
ans =
1.0000 0.5000
0.3333 0.2500

 O escalar 1 no numerador é expandido para um vetor de mesma dimensão de A e então é executada a operação de divisão elemento a elemento entre vetores.

O processo de expandir escalares para vetores é denominado expansão escalar e é extensivamente usado no MATLAB . 

Indexação por matriz

Exemplo de indexação por vetor:

>> A = [ 1 2 3; 4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> C = [1 3]
C =
1 3
>> B = A(C,C)
B =
1 3
7 9

Acesso a elementos específicos:

>> A = [ 1 2 3; 4 5 6] % constr´oi uma matriz 2 x 3
A =
1 2 3
4 5 6
>> A(2,3) = 0 % modifica o valor do elemento A(2,3)
A =
1 2 3
4 5 0
>> A(3,5) = 1 % coloca o valor 1 no elemento A(3,5)
a =
1 2 3 0 0
4 5 0 0 0
0 0 0 0 1

Note que no último caso o tamanho de A é expandido e preenchido com zeros para que o elemento A(3,5) possa existir.

Para preencher uma coluna toda com certo escalar podemos proceder da seguinte forma:

>> A(:,4) = [3; 3; 3]
A =
1 2 3 3 0
4 5 0 3 0
0 0 0 3 1

Dadas as possibilidades de erros, há uma forma alternativa que envolve expansão escalar:

>> A(:,4) = 3
A =
1 2 3 3 0
4 5 0 3 0
0 0 0 3 1

Inserindo linhas e colunas

Podemos inserir linhas e colunas indexando a matriz e atribuindo os novos valores.

O comando A(<lin>,:) = B faz com que as colunas da linha recebam os valores correspondentes dos elementos do vetor B, com B tendo um número compatível de elementos com A(<lin>,:).

>> A = [1 2; 3 4]
A =
    1 2
    345

>> B = [5 6]
B = 5 6

>> A(3,:) = B % inclui duas colunas na linha 3 até então inexistente
A =
    1 2
    3 4
    5 6

>> A(:,3) = [7;8;9]  % inclui três linhas na coluna 3 até então inexistente
A =
    1   2   7
    3   4   8
    5   6   9

Transposição de vetores

A matriz transposta do vetor coluna é um vetor linha e vice-versa.

A MATLAB utiliza o símbolo aspas-simples " ' "  para retornar a matriz transposta de outra.

>> A = [1 2 3]
A = 1 2 3

>> T = A'
T =
    1
    2
    3

O conjunto de todos os vetores-coluna formam um espaço vetorial que é o espaço dual para o conjunto de todos os vetores-linha.

>> A =  [1 2 3 ; 4 5 6]
A =
   1   2   3
   4   5   6

>> T = A'
T =
   1   4
   2   5
   3   6

Transpôr um vetor linha.

Operador " ' " para vetores reais retorna a transposta e para vetores complexos retorna a transposta conjugada. O operador " .' " para matrizes reais e complexas retorna a matriz transposta.

d = Columns 1 through 4 1.0 + 1.0i 2.0 + 2.0i 3.0 + 3.0i 4.0 + 4.0i Column 5 5.0 + 5.0i 
>> e = d’
>> f = d.
e = f = 1.0000 - 1.0000i 1.0000 + 1.0000i 2.0000 - 2.0000i 2.0000 + 2.0000i 3.0000 - 3.0000i 3.0000 + 3.0000i 4.0000 - 4.0000i 4.0000 + 4.0000i 5.0000 - 5.0000i 5.0000 + 5.0000i