Qual a diferença dos operadores * e .* quando utilizados entre duas matrizes?

Passo 1

O enunciado pergunta: qual a diferença entre os operadores * e .* quando usados entre duas matrizes?
Informações relevantes dadas (implícitas na pergunta):
  • Ambos são operadores binários aplicados a duas matrizes (ou a uma matriz e um escalar).
  • A notação * e .* é típica de ambientes como MATLAB/Octave (em outras linguagens a semântica pode variar).

Passo 2

Definição e condição para * (produto matricial).
Sejam A e B duas matrizes com dimensões
A\in\mathbb{R}^{m\times n},\qquad B\in\mathbb{R}^{n\times p}.
Então o produto matricial A*B (também escrito simplesmente AB) está definido e é uma matriz em \mathbb{R}^{m\times p}. O elemento na linha i e coluna j de AB é dado por
(AB)_{ij}=\sum_{k=1}^{n} A_{ik}\,B_{kj}.
Explicando devagar: para obter cada entrada do produto, você pega a linha i de A e a coluna j de B, multiplica termo a termo e soma os resultados — isto é o produto interno entre linha e coluna. Observações importantes:
  • As dimensões internas devem coincidir ( n no exemplo).
  • Em geral AB\neq BA (produto não comuta).
  • Produto matricial é a operação linear padrão usada em álgebra linear (composição de transformações lineares).

Passo 3

Definição e condição para .* (multiplicação elemento a elemento — produto de Hadamard).
Sejam A e B duas matrizes com a mesma dimensão
A\in\mathbb{R}^{m\times n},\qquad B\in\mathbb{R}^{m\times n}.
Então A.*B está definido e é uma matriz em \mathbb{R}^{m\times n} com entradas
(A.*B)_{ij}=A_{ij}\,B_{ij}\quad\text{para todo }i,j.
Ou seja, multiplica-se cada entrada de A pela entrada correspondente de B. Observações importantes:
  • As duas matrizes devem ter exatamente as mesmas dimensões (mesmo número de linhas e colunas).
  • O produto elemento a elemento é comutativo: A.*B=B.*A.
  • Este produto não corresponde ao produto matricial padrão e não tem as mesmas propriedades de inversão/identidade (a “identidade” é a matriz de uns, não a identidade I).

Passo 4

Exemplo numérico passo a passo (para ficar bem concreto).
Considere
A=\begin{pmatrix}1 & 2 \\[2pt] 3 & 4\end{pmatrix},\qquad B=\begin{pmatrix}5 & 6 \\[2pt] 7 & 8\end{pmatrix}.
Produto matricial A*B. As dimensões são 2\times2 e 2\times2, logo o produto está definido e resulta em 2\times2:
AB=\begin{pmatrix} 1\cdot5 + 2\cdot7 & 1\cdot6 + 2\cdot8 \\[4pt] 3\cdot5 + 4\cdot7 & 3\cdot6 + 4\cdot8 \end{pmatrix} =\begin{pmatrix} 5+14 & 6+16 \\[4pt] 15+28 & 18+32 \end{pmatrix} =\begin{pmatrix} 19 & 22 \\[4pt] 43 & 50 \end{pmatrix}.
Multiplicação elemento a elemento A.*B. As dimensões coincidem (ambas 2\times2), resultado é 2\times2:
A.*B=\begin{pmatrix} 1\cdot5 & 2\cdot6 \\[4pt] 3\cdot7 & 4\cdot8 \end{pmatrix} =\begin{pmatrix} 5 & 12 \\[4pt] 21 & 32 \end{pmatrix}.
Repare que os resultados são bem diferentes: AB vem de somas de produtos entre linhas e colunas; A.*B é só produto entrada a entrada.]

Passo 5

Propriedades contrastantes — pontos úteis para prova/implementação:
  • Dimensões: para A*B é necessário que o número de colunas de A seja igual ao número de linhas de B. Para A.*B as duas matrizes precisam ter exatamente as mesmas dimensões.
  • Comutatividade: A.*B=B.*A (sim), mas AB geralmente não é igual a BA (não, em geral).
  • Associatividade: (AB)C=A(BC) vale quando os produtos matriciais são definidos; para Hadamard, (A.*B).*C = A.*(B.*C) também vale (associativo elemento a elemento).
  • Distributividade: o produto matricial distribui sobre soma à esquerda e à direita quando definido; Hadamard também distribui sobre soma elemento a elemento.
  • Identidade: a identidade para produto matricial é a matriz identidade I (tal que AI=A), enquanto a identidade para Hadamard é a matriz de uns J (tal que A.*J=A).
  • Escalares: multiplicação por escalar \alpha coincide em ambos os casos no sentido prático: \alpha( A)=\alpha.*A=\alpha* A quando a operação faz sentido no ambiente (em MATLAB ambos funcionam com escalar).
  • Diferença de linguagem: em MATLAB/Octave * = produto matricial e .* = elemento a elemento. Em NumPy (Python) o operador * faz multiplicação elemento a elemento; o produto matricial em NumPy usa @ ou np.dot.

Passo 6

Dicas rápidas para a prova (pra você não morrer na hora):
  • Sempre verifique as dimensões antes de aplicar *. Se as dimensões não batem, o erro é de dimensão.
  • Se a operação desejada é “multiplicar cada elemento correspondente”, use .*. Se quer compor transformações/usar produto linear, use *.
  • Lembre-se do exemplo numérico memorizável: com as matrizes A e B acima, AB=\begin{pmatrix}19&22\\\ 43&50\end{pmatrix} enquanto A.*B=\begin{pmatrix}5&12\\\ 21&32\end{pmatrix}. Isso costuma convencer qualquer corretor — e a si mesmo.

Resposta

* = produto matricial (produto linear): exige que A\in\mathbb{R}^{m\times n} e B\in\mathbb{R}^{n\times p}; o resultado é AB\in\mathbb{R}^{m\times p} com (AB)_{ij}=\sum_{k=1}^{n}A_{ik}B_{kj}.
.* = multiplicação elemento a elemento (produto de Hadamard): exige que A,B\in\mathbb{R}^{m\times n}; o resultado é A.*B\in\mathbb{R}^{m\times n} com (A.*B)_{ij}=A_{ij}B_{ij}.

Exercícios relacionados