Vimos aula Teoria matemática de operações com vetores que, a partir da multiplicação entre matrizes, é possível compreendermos o que é a matriz identidade, contendo os elemento neutros da multiplicação de matrizes.

O produto de M por M-1 é igual à matriz identidade, onde a matriz M-1 inversa da matriz M

Também é possível a multiplicação de uma matriz por um número real — nesse caso, multiplicamos cada um dos elementos da matriz pelo número real.

Para multiplicar duas matrizes, é necessário que as as dimensões sejam compatíveis, como no exemplo:

A(3×5).B(5×1) = C(3x1)

O leitor pode conferir que o número de colunas da matriz à esquerda (A) é igual ao número de linhas da matriz à direita (B), satisfazendo a condição para a multiplicação entre matrizes. Por outro lado, não é possível realizar a multiplicação de duas matrizes com mesma dimensão m × n, como por exemplo m =5 e n = 3:

A(5×3).B(5×3) = ?? − Impossível !

Outra coisa impossível de se fazer é a divisão de uma matriz por outra, não importando quais sejam as dimensões

A(m×n) = ?? − Impossível !
------
B(p×q)

Esta operação causa graves problemas de saúde em professores de matemática quando os alunos insistem em realizá-la.

Contudo, no MATLAB, existem as operações elemento-a-elemento (eae), incluindo a multiplicação-eae e divisão-eae, para operação entre matrizes com dimensões compatíveis.

 

Operações elemento a elemento

Operação Resultado
Adição A + c = [a1 + c . . . an + c]
Subtração A − c = [a1 − c . . . an − c]
Multiplicação A ∗ c = [a1 ∗ c . . . an ∗ c]
Divisão A/c = c\A = [a1/c . . . an/c]
Exponenciação

A.ˆc = [ac1 . . . acn]

c. ˆA = [ca1 . . . can ]

Não há problemas de o vetor A ser bi-dimensional

>> c = 2; A = 1:2:10;
>> A+c
ans = 3 5 7 9 11
>> A-c
ans = -1 1 3 5 7
>> A*c
ans = 2 6 10 14 18
>> A/c % mesmo que c\A
ans = 0.5000 1.5000 2.5000 3.5000 4.5000
>> A.ˆc
ans = 1 9 25 49 81
>> c.ˆA
ans = 2 8 32 128 512

  Sejam A = [a1 . . . an] e B = [b1 . . . bn] vetores.

Operação Resultado
Adição A + B = [a1 + b1 . . . an + bn]
Subtração A − B = [a1 − b1 . . . an − bn]
Multiplicação A. ∗ B = [a1 ∗ b1 . . . an ∗ bn]
Divisão esq. A./B = [a1/b1 . . . an/bn
Divisão dir. B.\A = [a1/b1 . . . an/bn]
Exponenciação A.ˆB = [ab11 . . . abnn ]

 Exemplo - vetor e vetor

>> A = 1:5;
>> B=5:-1:1;
>> A+B
ans = 6 6 6 6 6
>> A-B
ans = -4 -2 0 2 4
>> A.*B
ans = 5 8 9 8 5
>> A./B
ans = 0.2000 0.5000 1.0000 2.0000 5.0000
>> A.\B
ans = 5.0000 2.0000 1.0000 0.5000 0.2000
>> A.ˆB
ans = 1 16 27 16 5

As operações elemento a elemento podem ser usadas em expressões matemáticas, desde que respeitadas as dimensões dos vetores envolvidos.

A precedência dos operadores é a tradicional.

>> A = [1 2 3; 4 5 6];
>> B = [7 8 9; 10 11 12];
>> 2 * A - 1
ans = 1 3 5 7 9 11
>> 2 * A - B
ans = -5 -4 -3 -2 -1 0
>> A.ˆ(B - 1)
ans = 1 128 6561 262144 9765625 362797056

 

 

Operações eae

O MATLAB tem a capacidade específica de realização de operações eae (elemento-a-elemento, elementwise) com matrizes.

Os operadores eae do MATLAB têm o sinal de ponto "." do lado esquerdo da operação desejada (sem espaço entre os símbolos).

Multiplicação-eae:

>> A = B .* C

Divisão-eae:

>> A = B ./ C

Potenciação-eae:

>> A = B .^ C

Para fixarmos a ideia das operações eae, vamos testar os comandos abaixo:

>> X = [3, 4, 5; 1, 6, 3; 2, 2, 2; -1, 1, 2] % inserindo uma nova matriz
>> Y = [2, 0, 4; 0, 1, 6; 4, 1, 0; -1, 0, 7] % inserindo uma nova matriz
>> M = X .* Y                                % multiplicação eae
>> D = X ./ Y                                % divisão eae
>> A = X .+ Y                                % soma eae
>> S = X .- Y                                % subtração eae
>> P = X .^ Y                                % potenciação eae

Operações eae mais complexas

Dado essa grande quantidade de ferramentas eae e os conceitos de discretização, é possível unirmos esses dois mundos para criar funções (discretizadas) bem complexas
com MATLAB.

Por exemplo, suponha que desejamos criar uma função polinomial do quinto grau

f(x)= −0.1x5 + 40x3 − 2000x − 5

para examinarmos o seu gráfico. Como proceder?


Em primeiro lugar devemos definir o domínio discretizado como o comando linspace:

 

>> x = linspace(-20, 20, 100)
x =
 Columns 1 through 13:
  -20.0000  -19.5960  -19.1919  -18.7879  -18.3838  -17.9798  -17.5758  -17.1717  -16.7677  -16.3636  -15.9596  -15.5556  -15.1515
   ...
   Columns 92 through 100:
   16.7677   17.1717   17.5758   17.9798   18.3838   18.7879   19.1919   19.5960   20.0000

O vetor é criado com 100 elementos, onde o primeiro = −20 e o ultimo´= 20, e os intermediários estão igualmente espaçados.

Depois deve-se criar o vetor que vai representar a imagem da função discretizada:

>> y = -0.1 * (x .^ 5) + 40 * (x .^ 3) - 2000 * x - 5
y =
   Columns 1 through 10:
   3.9995e+04   2.7148e+04   1.5991e+04   6.3908e+03  -1.7800e+03  -8.6420e+03  -1.4310e+04  -1.8894e+04  -2.2497e+04  -2.5217e+04
   ...
   Columns 91 through 100:
   2.5207e+04   2.2487e+04   1.8884e+04   1.4300e+04   8.6320e+03   1.7700e+03  -6.4008e+03  -1.6001e+04  -2.7158e+04  -4.0005e+04

Para, finalmente, plotar o gráfico da função discretizada, utilizamos:

>> plot(x,y)

cujo resultado pode ser conferido na figura abaixo.

2.6 Operações com escalares, uma pequena exceção

Rigorosamente falando, é impossível somar uma constante (que é uma matriz um por um, lembra?) a uma matriz qualquer de dimensões maiores do que um, afinal de contas as dimensões "não batem". No entanto o MATLAB permite este  "abuso" entendendo que se deseja somar a constante a todas as entradas da matriz. Isto funciona para todas as outras operações, tais como subtração, multiplicação e divisão, entre outras. Entretanto, o leitor deve tomar cuidado, pois isso não funciona com a potenciação.

Para verificar esta propriedade, testemos os seguintes exemplos:

>> A =[1,2,1;0,1,2;1,3,0]
A =
   1   2   1
   0   1   2
   1   3   0

>> B =5 + A
B =
   6   7   6
   5   6   7
   6   8   5

>> C = 2 * A
C =
   2   4   2
   0   2   4
   2   6   0

>> D = 0.5 - A
D =
  -0.5000  -1.5000  -0.5000
   0.5000  -0.5000  -1.5000
  -0.5000  -2.5000   0.5000