Matriz inversa: desfazendo transformações

Compreender a matriz inversa como a operação que desfaz uma transformação, conectando invertibilidade, determinante, sistemas lineares, perda de informação e computação numérica.

Compartilhar
Capa: cubo de vidro ciano ligado por um feixe de luz a um prisma violeta, com um feixe curvo de retorno ao cubo; título Matriz inversa: o caminho de volta
🎓
Matemática para IA · Álgebra Linear · Aula 08
Compreender a matriz inversa como a operação que desfaz uma transformação, conectando invertibilidade, determinante, sistemas lineares, perda de informação e computação numérica. Pré-requisito: Aula 07 — Determinante.

Num editor de imagens, você gira uma foto 30°, amplia 2 vezes e aperta Ctrl+Z duas vezes: a foto volta exatamente ao que era. Agora converta a mesma foto para tons de cinza. O Ctrl+Z ainda funciona, mas só porque o editor guardou a original em algum lugar. Com apenas a versão cinza nas mãos, não há conta que devolva as cores: muitos tons diferentes de vermelho, verde e azul viram o mesmo cinza, e a informação que os distinguia sumiu.

As duas operações são transformações. A diferença é que a primeira tem caminho de volta e a segunda não. No artigo anterior da série, o determinante mostrou quando uma matriz esmaga uma dimensão. Aqui entra a operação que percorre o caminho de volta quando ele existe: a matriz inversa, $A^{-1}$.

Ao final, você vai conseguir calcular a inversa de uma matriz 2 × 2 e conferir o resultado; dizer quando ela não existe, pelo determinante, pela geometria e pela perda de informação; usar a inversa para resolver um sistema linear e entender por que, no código, se prefere np.linalg.solve a np.linalg.inv; reconhecer quando uma matriz invertível é, na prática, quase singular; e identificar onde $A^{-1}$ aparece em IA, da distância de Mahalanobis à regressão linear, e onde ela falta, como nos autoencoders.

💡
Ideia-chave: $A^{-1}$ é a transformação que desfaz $A$, de modo que $A^{-1}A = AA^{-1} = I$. Ela só existe quando $A$ é quadrada e não destruiu informação ($\det(A) \neq 0$). E existir na teoria não basta: se $A$ está perto de ser singular, desfazer a transformação amplifica os erros dos dados, e nenhum algoritmo evita isso. No código, resolve-se $Ax = b$ com solve, sem calcular $A^{-1}$, para não somar a esse erro outro que dá para evitar.

1. A pergunta central

Nas últimas aulas, uma matriz virou uma regra que transforma uma representação em outra:

$$ x \rightarrow Ax $$

Agora a pergunta se inverte:

É possível desfazer essa transformação e recuperar o vetor original?

Se

$$ y=Ax $$

conhecemos $A$ e $y$, e queremos recuperar $x$. Quando existe uma transformação que desfaz $A$, ela é chamada de matriz inversa:

$$ \boxed{A^{-1}} $$

A ideia mais simples vem dos números. Se uma operação faz $x \rightarrow 2x$, ela é desfeita multiplicando por $1/2$. Com matrizes, queremos a mesma coisa: uma matriz que, aplicada depois de $A$, devolva tudo ao ponto de partida.

$$ \boxed{A^{-1}A=I} $$

Aqui $I$ é a matriz identidade, a transformação que não muda nenhum vetor (Goodfellow, Bengio & Courville, 2016). O caminho completo fica assim:

$$ x\xrightarrow{\;A\;}Ax\xrightarrow{\;A^{-1}\;}x $$

2. Um exemplo para conferir de cabeça

Considere a escala que já apareceu nas Aulas 06 e 07:

$$ A=\begin{bmatrix}2&0\\0&3\end{bmatrix} $$

Ela dobra a componente horizontal e triplica a vertical. A inversa precisa fazer o contrário, dividir a horizontal por 2 e a vertical por 3:

$$ A^{-1}=\begin{bmatrix}1/2&0\\0&1/3\end{bmatrix} $$

Multiplicando as duas, cada fator encontra o seu recíproco e sobra a identidade: $A^{-1}A=I$. Com um vetor concreto,

$$ \begin{aligned}x&=\begin{bmatrix}4\\6\end{bmatrix}\\[4pt]Ax&=\begin{bmatrix}8\\18\end{bmatrix}\\[4pt]A^{-1}(Ax)&=\begin{bmatrix}4\\6\end{bmatrix}\end{aligned} $$

Três painéis: o quadrado unitário e o ponto (4, 6); depois de A, um retângulo de área 6 e o ponto (8, 18); depois de A inversa, de novo o quadrado de área 1 e o ponto (4, 6)
A = diag(2, 3) leva (4, 6) a (8, 18) e multiplica áreas por 6; A⁻¹ = diag(1/2, 1/3) traz o ponto de volta e divide a área por 6.

A figura mostra também o que acontece com as áreas. Como $\det(A)=6$, a transformação multiplica áreas por 6, e a inversa precisa dividi-las por 6. A seção 9 mostra que isso vale sempre.

3. Definição formal e quem tem inversa

Uma matriz quadrada $A$ é invertível se existe uma matriz $A^{-1}$ tal que:

$$ \boxed{A^{-1}A=AA^{-1}=I} $$

Quando existe, a inversa é única. Uma matriz que tem inversa também é chamada de regular ou não singular; uma que não tem é singular (Deisenroth, Faisal & Ong, 2020).

Nem toda matriz quadrada tem inversa. Na Aula 07 vimos que $\det(A)=0$ significa que a transformação colapsou alguma dimensão e perdeu informação. Para matrizes quadradas, vale a equivalência (Deisenroth, Faisal & Ong, 2020):

$$ \boxed{A\text{ invertível}\iff\det(A)\neq0} $$

4. Projeção: quando não há caminho de volta

A projeção sobre o eixo horizontal,

$$ P=\begin{bmatrix}1&0\\0&0\end{bmatrix} $$

leva $(x, y)$ a $(x, 0)$: apaga a componente vertical. Então

$$ \begin{bmatrix}3\\2\end{bmatrix}\rightarrow\begin{bmatrix}3\\0\end{bmatrix} \qquad\text{e também}\qquad \begin{bmatrix}3\\500\end{bmatrix}\rightarrow\begin{bmatrix}3\\0\end{bmatrix} $$

Duas entradas diferentes geraram a mesma saída. Se alguém entrega só $(3, 0)$, não há como saber se a entrada era $(3, 2)$, $(3, 500)$ ou qualquer outro ponto da reta vertical $x = 3$. A informação da componente vertical foi destruída, logo $P^{-1}$ não existe. De fato, $\det(P)=1\cdot0-0\cdot0=0$.

A projeção P leva o ponto (3, 2) e o ponto (3, 500), indicado por uma seta para fora do gráfico, ao mesmo ponto (3, 0); na volta, uma interrogação sobre qual era a entrada
P leva toda a reta x = 3 ao mesmo ponto (3, 0). Na volta, não há como escolher: é o tom de cinza da abertura, em duas dimensões.

É a mesma situação da foto em tons de cinza. Uma transformação invertível pode esticar, girar, refletir ou deformar o espaço, mas preserva informação suficiente para existir um caminho de volta. Uma transformação singular pode levar o plano a uma linha, ou o espaço 3D a um plano, e aí diferenças entre vetores desaparecem.

5. A fórmula da inversa 2 × 2

Para uma matriz 2 × 2 qualquer,

$$ A=\begin{bmatrix}a&b\\c&d\end{bmatrix} \qquad\text{com}\qquad ad-bc\neq0 $$

a inversa é (Deisenroth, Faisal & Ong, 2020):

$$ \boxed{A^{-1}=\frac{1}{ad-bc}\begin{bmatrix}d&-b\\-c&a\end{bmatrix}} $$

A receita: troque de lugar as entradas da diagonal principal ($a$ e $d$), troque o sinal das outras duas ($b$ e $c$) e divida tudo pelo determinante $ad-bc$. A fórmula também mostra por que o determinante zero bloqueia a inversa: a divisão por $ad - bc$ deixaria de existir.

Um exemplo completo:

$$ A=\begin{bmatrix}2&1\\1&1\end{bmatrix} \qquad \det(A)=2\cdot1-1\cdot1=1 $$

Como o determinante é 1, a matriz é invertível, e a divisão nem altera nada:

$$ \boxed{A^{-1}=\begin{bmatrix}1&-1\\-1&2\end{bmatrix}} $$

Conferindo:

$$ AA^{-1}=\begin{bmatrix}2-1&-2+2\\1-1&-1+2\end{bmatrix}=\begin{bmatrix}1&0\\0&1\end{bmatrix}=I $$

À esquerda, o quadrado unitário vira um paralelogramo com lados (2, 1) e (1, 1), de área 1; à direita, a inversa leva esse paralelogramo de volta ao quadrado, e as colunas da inversa, (1, −1) e (−1, 2), são os vetores que A leva em e1 e e2
A = [[2, 1], [1, 1]] inclina o quadrado num paralelogramo de área 1. As colunas de A⁻¹, (1, −1) e (−1, 2), são os vetores que A manda exatamente em e₁ e e₂.

A figura dá uma leitura geométrica das colunas da inversa. Na Aula 06, as colunas de $A$ diziam para onde iam os vetores da base. As colunas de $A^{-1}$ respondem à pergunta oposta: quais vetores $A$ leva até $e_1$ e $e_2$? Aqui, $A(1,-1)=(1,0)$ e $A(-1,2)=(0,1)$.

A fórmula é útil para entender e para matrizes pequenas. Em matrizes maiores, usamos algoritmos numéricos, e a seção 11 mostra que, na maioria das vezes, nem é a inversa que queremos calcular.

6. Inversa e sistemas lineares

Um sistema linear se escreve como $Ax=b$. Se $A^{-1}$ existe, basta multiplicar os dois lados por ela:

$$ A^{-1}Ax=A^{-1}b \quad\Rightarrow\quad \boxed{x=A^{-1}b} $$

Essa é a forma conceitual de resolver sistemas lineares (Goodfellow, Bengio & Courville, 2016). Um exemplo:

$$ \begin{cases} 2x+y=5\\ x+y=3 \end{cases} $$

ou, na forma matricial,

$$ \begin{bmatrix}2&1\\1&1\end{bmatrix} \begin{bmatrix}x\\y\end{bmatrix} = \begin{bmatrix}5\\3\end{bmatrix} $$

A matriz é a da seção anterior, cuja inversa já conhecemos:

$$ \begin{bmatrix}x\\y\end{bmatrix} = \begin{bmatrix}1&-1\\-1&2\end{bmatrix} \begin{bmatrix}5\\3\end{bmatrix} = \begin{bmatrix}5-3\\-5+6\end{bmatrix} = \begin{bmatrix}2\\1\end{bmatrix} $$

Portanto, $x=2$ e $y=1$. Basta substituir para conferir: $2\cdot2+1=5$ e $2+1=3$.

À esquerda, as retas 2x + y = 5 e x + y = 3 se cruzando no ponto (2, 1); à direita, o vetor b = (5, 3) obtido somando duas vezes a coluna (2, 1) com uma vez a coluna (1, 1)
Duas leituras do mesmo sistema. Por linhas: as retas se cruzam em (2, 1). Por colunas: b = (5, 3) é 2 vezes a primeira coluna mais 1 vez a segunda.

A leitura geométrica de Ax = b

A equação $Ax = b$ pode ser lida como uma pergunta:

Qual vetor $x$, quando transformado por $A$, produz $b$?

A inversa percorre a transformação no sentido contrário, de $b$ até $x$. No painel da direita da figura, a resposta $(2, 1)$ diz quanto de cada coluna de $A$ é preciso somar para chegar a $(5, 3)$.

Uma saída, uma entrada

Quando $A$ é invertível, cada saída tem exatamente uma entrada correspondente. Se duas entradas dessem a mesma saída,

$$ Ax_1=Ax_2 $$

bastaria aplicar $A^{-1}$ dos dois lados para concluir que $x_1=x_2$. Transformações assim são chamadas de um para um (injetoras). A projeção da seção 4 é o contraexemplo: $(3, 2)$ e $(3, 500)$ têm a mesma saída.

7. O teorema da matriz invertível, em prévia

Para uma matriz quadrada $A$ de tamanho $n \times n$, várias afirmações que parecem diferentes são, na verdade, a mesma. Ou todas são verdadeiras, ou todas são falsas (Goodfellow, Bengio & Courville, 2016; Deisenroth, Faisal & Ong, 2020):

  • $A^{-1}$ existe;
  • $\det(A)\neq0$;
  • as colunas de $A$ são linearmente independentes;
  • $Ax=0$ tem apenas a solução $x=0$;
  • $Ax=b$ tem solução única para todo $b$;
  • o posto de $A$ é $n$ (nenhuma direção é perdida).
Diagrama com seis caixas ligadas por setas duplas: inversa existe, determinante diferente de zero, colunas independentes, Ax = 0 só com x = 0, Ax = b com solução única para todo b, posto igual a n
Seis maneiras de dizer a mesma coisa sobre uma matriz quadrada. Basta checar uma para saber todas.

Esse teorema costura as aulas anteriores. A independência linear diz que as colunas cercam um volume de verdade (Aula 07). O determinante mede esse volume. E $Ax = 0$ só com $x = 0$ é a forma algébrica de "nenhuma entrada diferente de zero é esmagada até a origem". O último item, sobre o posto, antecipa a Aula 09.

8. Inversas que você já conhece

As transformações da Aula 06 têm inversas que dá para escrever sem conta nenhuma.

Rotação

Desfazer um giro de $\theta$ é girar $-\theta$:

$$ \boxed{R(\theta)^{-1}=R(-\theta)} $$

Como $\cos(-\theta)=\cos\theta$ e $\sin(-\theta)=-\sin\theta$, a matriz $R(-\theta)$ é exatamente a transposta de $R(\theta)$, isto é, a matriz com linhas e colunas trocadas:

$$ \boxed{R^{-1}=R^T} $$

Matrizes com essa propriedade, cujas colunas são ortonormais, se chamam matrizes ortogonais, e as rotações pertencem a essa classe (Deisenroth, Faisal & Ong, 2020). É uma propriedade valiosa: a inversa de uma matriz ortogonal sai de graça, só transpondo (Goodfellow, Bengio & Courville, 2016).

Reflexão

Para a reflexão no eixo horizontal,

$$ F=\begin{bmatrix}1&0\\0&-1\end{bmatrix} \qquad\Rightarrow\qquad \boxed{F^{-1}=F} $$

porque refletir duas vezes devolve o vetor original.

Escala

Para uma escala, a inversa divide pelos mesmos fatores:

$$ S=\begin{bmatrix}2&0\\0&5\end{bmatrix} \qquad\Rightarrow\qquad S^{-1}=\begin{bmatrix}1/2&0\\0&1/5\end{bmatrix} $$

Três painéis com a letra F: girada 30 graus e trazida de volta por um giro de menos 30 graus; espelhada no eixo x e espelhada de novo; esticada por diag(2, 5) e encolhida por diag(1/2, 1/5)
Rotação, reflexão e escala, cada uma seguida da sua inversa: o F sempre volta ao lugar de partida (contorno tracejado).

9. Composição: a ordem se inverte

Se

$$ y=BAx $$

primeiro aplicamos $A$ e depois $B$. Para desfazer, é preciso começar pela última operação:

$$ \boxed{(BA)^{-1}=A^{-1}B^{-1}} $$

É a regra da roupa: você veste a camiseta e depois o casaco; para desfazer, tira primeiro o casaco e depois a camiseta. Algebricamente, basta conferir que $(A^{-1}B^{-1})(BA)=A^{-1}(B^{-1}B)A=A^{-1}A=I$ (Deisenroth, Faisal & Ong, 2020).

Um exemplo mostra que a ordem não é detalhe. Seja $A=\begin{bmatrix}2&0\\0&1\end{bmatrix}$ (dobra a horizontal) e $B=\begin{bmatrix}1&1\\0&1\end{bmatrix}$ (cisalhamento). O vetor $x=(1,1)$ vai a $Ax=(2,1)$ e depois a $y=BAx=(3,1)$. Desfazendo na ordem certa, $B^{-1}$ leva $(3,1)$ a $(2,1)$ e $A^{-1}$ leva $(2,1)$ a $(1,1)$. Na ordem errada, $A^{-1}$ primeiro leva $(3,1)$ a $(1{,}5;\,1)$, e $B^{-1}$ termina em $(0{,}5;\,1)$, longe do ponto de partida.

Três fileiras de caixas: na ida, (1, 1) vai a (2, 1) por A e a (3, 1) por B; na volta certa, B inversa e depois A inversa levam (3, 1) a (2, 1) e a (1, 1); na ordem errada, A inversa e depois B inversa levam (3, 1) a (1,5; 1) e a (0,5; 1)
Ida: A, depois B. Volta certa: B⁻¹, depois A⁻¹, e o ponto (1, 1) reaparece. Volta na ordem errada: termina em (0,5; 1).

Também vale, como era de esperar,

$$ \boxed{(A^{-1})^{-1}=A} $$

desfazer o desfazer é refazer.

Determinante da inversa

Como $AA^{-1}=I$, $\det(I)=1$ e o determinante de um produto é o produto dos determinantes (Aula 07),

$$ \det(A)\det(A^{-1})=1 $$

e, portanto,

$$ \boxed{\det(A^{-1})=\frac{1}{\det(A)}} $$

Se $A$ multiplica áreas por 6, como a escala da seção 2, a inversa as multiplica por $1/6$ (Deisenroth, Faisal & Ong, 2020).

10. Quando A é singular: nenhuma ou infinitas soluções

Considere a matriz da Aula 07 cuja segunda coluna é o dobro da primeira:

$$ A=\begin{bmatrix}1&2\\2&4\end{bmatrix} \qquad \det(A)=1\cdot4-2\cdot2=0 $$

Ela não tem inversa. Mas o sistema $Ax=b$ ainda pode ser montado, e o que acontece com ele depende de $b$: ou não há solução nenhuma, ou há infinitas. Um sistema linear real nunca tem, por exemplo, exatamente duas soluções (Deisenroth, Faisal & Ong, 2020).

Infinitas soluções.

$$ \begin{cases} x+2y=4\\ 2x+4y=8 \end{cases} $$

A segunda equação é a primeira multiplicada por 2. Na verdade há uma equação só, e todo ponto da reta $x + 2y = 4$ serve: $(4, 0)$, $(0, 2)$, $(2, 1)$…

Nenhuma solução.

$$ \begin{cases} x+2y=4\\ 2x+4y=10 \end{cases} $$

Dividindo a segunda por 2, ela diz $x + 2y = 5$, o que contradiz a primeira. As duas retas são paralelas e nunca se cruzam.

À esquerda, as retas x + 2y = 4 e 2x + 4y = 8 sobrepostas numa só, com três de seus pontos marcados; à direita, as retas paralelas x + 2y = 4 e x + 2y = 5, sem ponto em comum
Com det(A) = 0, as duas retas têm a mesma inclinação. Ou coincidem (infinitas soluções), ou são paralelas (nenhuma).

O motivo é o da Aula 07: as colunas $(1, 2)$ e $(2, 4)$ apontam na mesma direção, então $Ax$ só alcança os vetores dessa reta. Se $b$ está nela, como $(4, 8)$, há infinitas combinações que chegam lá; se não está, como $(4, 10)$, nenhuma chega. Para uma matriz quadrada:

$$ \boxed{\text{colunas independentes}\iff A\text{ invertível}} $$

e, se as colunas são dependentes, $\det(A)=0$.

Próxima grande ideia: o posto

Nem toda matriz é quadrada. Uma matriz $100\times50$, que leva vetores de 50 dimensões a 100, não tem inversa no sentido desta aula: a definição exige $A^{-1}A=AA^{-1}=I$ com matrizes quadradas. Precisamos de um conceito mais geral, o posto (rank), que mede quantas direções independentes realmente existem na transformação. Ele é o assunto da Aula 09 e volta em compressão, PCA, SVD, embeddings e redundância.

11. Na prática com NumPy

Em código, a inversa é uma chamada:

import numpy as np

A = np.array([
    [2.0, 1.0],
    [1.0, 1.0]
])

A_inv = np.linalg.inv(A)

print(A_inv)
print(A @ A_inv)
[[ 1. -1.]
 [-1.  2.]]
[[1. 0.]
 [0. 1.]]

Aqui a identidade saiu exata, porque todas as contas envolvem números pequenos e inteiros. Em geral, o ponto flutuante deixa valores minúsculos, como $10^{-16}$, onde a matemática diz zero; compare com np.allclose, não com ==.

O mini laboratório da aula faz a ida e volta completa:

import numpy as np

A = np.array([
    [2.0, 1.0],
    [1.0, 1.0]
])

x = np.array([2.0, 1.0])

y = A @ x
A_inv = np.linalg.inv(A)
x_recuperado = A_inv @ y

print("x original:", x)
print("y transformado:", y)
print("A inversa:")
print(A_inv)
print("x recuperado:", x_recuperado)
x original: [2. 1.]
y transformado: [5. 3.]
A inversa:
[[ 1. -1.]
 [-1.  2.]]
x recuperado: [2. 1.]

Repare que $y = (5, 3)$ é o lado direito do sistema da seção 6: transformar $(2, 1)$ por $A$ e resolver $Ax = (5, 3)$ são a mesma pergunta feita nos dois sentidos.

A regra de ouro: resolva, não inverta

Embora a matemática escreva $x=A^{-1}b$, quem programa raramente calcula a inversa só para resolver um sistema. Em vez de

x = np.linalg.inv(A) @ b

prefira

import numpy as np

A = np.array([
    [2.0, 1.0],
    [1.0, 1.0]
])

b = np.array([5.0, 3.0])

x = np.linalg.solve(A, b)

print(x)
[2. 1.]

O solve resolve o sistema diretamente pela rotina gesv do LAPACK (NumPy, 2026), que fatora $A$ por eliminação de Gauss com pivoteamento (a decomposição LU) e usa os fatores para chegar a $x$, sem nunca formar $A^{-1}$ (LAPACK, 2026). Moler (2004) explica o motivo com um sistema de uma equação só, $7x = 21$. A melhor forma de resolvê-lo é dividir: $x = 21/7 = 3$. Pela inversa, guardando $1/7$ com seis casas decimais, seria $x = 7^{-1}\times21 = 0{,}142857\times21 = 2{,}999997$: mais contas (uma divisão e uma multiplicação, em vez de uma divisão) e uma resposta menos precisa. A mesma lógica vale para sistemas grandes, e é por isso que Goodfellow, Bengio e Courville (2016) tratam $A^{-1}$ como ferramenta sobretudo teórica: algoritmos que usam o próprio $b$ costumam chegar a estimativas mais precisas de $x$. A seção 12 mostra a diferença num caso difícil.

Matriz singular

Com a matriz da seção 10, o NumPy reclama:

import numpy as np

A_singular = np.array([
    [1.0, 2.0],
    [2.0, 4.0]
])

print(np.linalg.det(A_singular))
np.linalg.inv(A_singular)
0.0
numpy.linalg.LinAlgError: Singular matrix

O np.linalg.solve levanta o mesmo erro para essa matriz, com qualquer $b$. Até aqui, tudo como a teoria manda. O problema é que nem sempre o NumPy percebe.

12. Armadilhas numéricas: singular escondida e quase singular

Os três exemplos desta seção não estão na aula; foram executados com NumPy 2.2.3 (Python 3.13) para mostrar o que a aula chama de matrizes quase singulares.

Uma singular que passa despercebida

import numpy as np

M = np.array([[1.0, 2.0, 3.0],
              [4.0, 5.0, 6.0],
              [7.0, 8.0, 9.0]])   # 3ª linha = 2·(2ª) − 1ª: singular

M_inv = np.linalg.inv(M)          # nenhum erro...
print(M_inv[0])                   # ...mas entradas da ordem de 10^15
print(M @ M_inv)                  # deveria ser a identidade
print(np.linalg.matrix_rank(M))
print(f"{np.linalg.cond(M):.1e}")
[-4.50359963e+15  9.00719925e+15 -4.50359963e+15]
[[ 0.  0.  0.]
 [-4.  0. -4.]
 [ 0.  0.  0.]]
2
3.8e+16

A matriz $M$ é singular: a terceira linha é o dobro da segunda menos a primeira, e o posto é 2. Mas o arredondamento impediu que o algoritmo encontrasse um pivô exatamente zero, e o inv devolveu, sem reclamar, uma "inversa" com entradas de $10^{15}$. O produto $MM^{-1}$, que deveria ser a identidade, não tem nada a ver com ela. A documentação avisa que, para matrizes mal condicionadas, o erro pode ou não ser levantado, e os resultados podem ser imprecisos (NumPy, 2026). Os valores exatos acima, e até a ocorrência do erro, podem variar com a biblioteca de álgebra linear instalada; o recado não varia: a ausência de erro não prova que a inversa está certa.

Quase singular: pequenas mudanças, grandes saltos

Uma matriz pode ter $\det(A)\neq0$ e ainda estar muito perto de ser singular. Se as colunas são quase paralelas, a transformação comprime muito alguma direção, e desfazê-la amplifica qualquer erro nos dados:

import numpy as np

A = np.array([[1.0, 1.0],
              [1.0, 1.0001]])    # colunas quase paralelas

print(np.linalg.solve(A, [2.0, 2.0001]))
print(np.linalg.solve(A, [2.0, 2.0002]))   # b mudou na 5ª casa
print(f"{np.linalg.cond(A):.0f}")
[1. 1.]
[0. 2.]
40002

Mudar a segunda componente de $b$ em $0{,}0001$, uma variação relativa de cerca de $0{,}0035\%$, levou a solução de $(1, 1)$ a $(0, 2)$, uma variação relativa de $100\%$. As duas retas são quase a mesma, e um empurrão minúsculo em uma delas faz o ponto de encontro escorregar para longe.

As retas x + y = 2 e x + 1,0001y = 2,0001, quase sobrepostas, cruzando em (1, 1); com o lado direito 2,0002, a segunda reta se desloca imperceptivelmente e o cruzamento salta para (0, 2)
As retas são praticamente indistinguíveis. Um deslocamento de 0,0001 no lado direito move o cruzamento de (1, 1) para (0, 2).

Quem mede essa sensibilidade é o número de condição:

$$ \kappa(A)=\|A\|\,\|A^{-1}\| $$

e ele limita quanto um erro em $b$ pode crescer em $x$:

$$ \frac{\|\delta x\|}{\|x\|}\le\kappa(A)\,\frac{\|\delta b\|}{\|b\|} $$

onde $\|\cdot\|$ é a norma (o tamanho) de um vetor ou de uma matriz, $\delta b$ é uma perturbação em $b$ e $\delta x$ a mudança que ela causa em $x$. A desigualdade diz que $\kappa(A)$ é um fator de amplificação: um erro relativo nos dados pode virar um erro até $\kappa(A)$ vezes maior na solução (Moler, 2004). No exemplo, a amplificação foi de cerca de 28 mil, abaixo do teto $\kappa(A)\approx40\,002$. Moler também propõe ler $\kappa(A)$ como o inverso da distância relativa da matriz até a matriz singular mais próxima: $\kappa$ grande, matriz quase singular. Ele vale no mínimo 1, o valor da identidade, e é infinito para matrizes singulares na aritmética exata (Moler, 2004; NumPy, 2026); em ponto flutuante, aparece como um número enorme, como os $3{,}8\times10^{16}$ de $M$. Como mostrou a Aula 07, o determinante não serve de termômetro para isso; o número de condição serve.

inv contra solve num caso difícil

A matriz de Hilbert, com entradas $H_{ij}=1/(i+j-1)$, é muito mal condicionada, como o próprio código vai mostrar. O código abaixo resolve o mesmo sistema pelos dois caminhos, sabendo de antemão que a resposta certa é um vetor de uns:

import numpy as np

n = 10
i = np.arange(n)
H = 1.0 / (i[:, None] + i[None, :] + 1)   # matriz de Hilbert 10 × 10
x_true = np.ones(n)
b = H @ x_true

x_inv = np.linalg.inv(H) @ b
x_sol = np.linalg.solve(H, b)

print(f"cond(H)        = {np.linalg.cond(H):.1e}")
print(f"resíduo  inv   = {np.linalg.norm(H @ x_inv - b):.1e}")
print(f"resíduo  solve = {np.linalg.norm(H @ x_sol - b):.1e}")
print(f"erro     inv   = {np.linalg.norm(x_inv - x_true):.1e}")
print(f"erro     solve = {np.linalg.norm(x_sol - x_true):.1e}")
cond(H)        = 1.6e+13
resíduo  inv   = 1.1e-04
resíduo  solve = 5.4e-16
erro     inv   = 1.3e-02
erro     solve = 5.2e-04

O resíduo $\|Hx-b\|$ mede se a resposta satisfaz o sistema. Com solve, ele fica no nível do arredondamento ($10^{-16}$), mesmo com $\kappa(H)\approx10^{13}$. É o que Moler (2004) descreve para a eliminação de Gauss com pivoteamento: o resíduo relativo costuma ficar do tamanho do erro de arredondamento, por pior que seja o condicionamento. Com inv, o resíduo é mais de $10^{11}$ vezes maior. O erro em relação à resposta verdadeira, por sua vez, é grande nos dois casos, porque nenhum algoritmo escapa de $\kappa(H)$. Moler (2004) limita o erro relativo da solução a algo da ordem de $\kappa(A)\,\epsilon$, onde $\epsilon\approx2{,}2\times10^{-16}$ é a precisão da máquina; aqui, $1{,}6\times10^{13}\times2{,}2\times10^{-16}\approx3{,}5\times10^{-3}$, ou seja, dos cerca de 16 algarismos da precisão dupla só restam dois ou três confiáveis. Neste exemplo, ainda assim, o solve errou cerca de 25 vezes menos.

Ficam duas lições separadas. O condicionamento é uma propriedade do problema: se $\kappa(A)$ é enorme, os dados precisam ser muito precisos para a resposta valer alguma coisa. O algoritmo é escolha sua: solve é mais barato e não acrescenta erro desnecessário. Calcular $A^{-1}$ explicitamente faz sentido quando você precisa da matriz inversa em si, não de $x$.

13. Onde isso aparece em IA

Modelos de IA trabalham com matrizes grandes, otimização, covariâncias, transformações, sistemas lineares e decomposições. Entender inversa e invertibilidade ajuda a responder perguntas práticas: quando uma informação pode ser recuperada, quando dimensões foram colapsadas, quando um sistema tem solução única, por que certas transformações são instáveis e como matrizes representam relações entre variáveis. Quatro lugares onde $A^{-1}$ aparece explicitamente:

Distância de Mahalanobis

Em estatística multivariada, a distância de um ponto $x$ até a média $\mu$ de uma nuvem de dados com covariância $\Sigma$ é medida por

$$ \Delta^2=(x-\mu)^T\,\Sigma^{-1}\,(x-\mu) $$

a distância de Mahalanobis, que se reduz à distância euclidiana quando $\Sigma$ é a identidade (Bishop, 2006). A inversa $\Sigma^{-1}$ "desfaz" o formato da nuvem: comprime as direções em que os dados variam muito e estica as direções em que variam pouco, antes de medir.

import numpy as np

mu = np.array([0.0, 0.0])
Sigma = np.array([[4.0, 1.8],
                  [1.8, 1.0]])         # covariância: x1 e x2 andam juntos

def mahalanobis(x, mu, Sigma):
    d = x - mu
    return np.sqrt(d @ np.linalg.solve(Sigma, d))   # sem inverter Sigma

p = np.array([2.0, 1.0])               # na direção em que os dados variam
q = np.array([-1.0, 2.0])              # contra a correlação

print(round(np.linalg.norm(p - mu), 3), round(np.linalg.norm(q - mu), 3))
print(round(mahalanobis(p, mu, Sigma), 2), round(mahalanobis(q, mu, Sigma), 2))
2.236 2.236
1.03 5.64
Nuvem de pontos alongada na diagonal com elipses de distância de Mahalanobis 1, 2 e 3; os pontos p = (2, 1) e q = (−1, 2) estão no mesmo círculo de raio 2,236 em torno da origem, mas p fica perto da elipse 1 e q bem fora da elipse 3
p e q estão à mesma distância euclidiana da média (2,236), mas p segue a correlação dos dados (Mahalanobis 1,03) e q vai contra ela (5,64): para essa nuvem, q é o ponto atípico.

Os dois pontos estão à mesma distância euclidiana da média, mas $p$ acompanha a correlação dos dados e $q$ vai contra ela: para essa nuvem, $q$ é muito mais estranho. Repare que a função usa solve, a regra da seção 11 aplicada a um caso real. E se $\Sigma$ for singular (uma variável é combinação linear das outras), a distância nem está definida.

Regressão linear

Na regressão linear por mínimos quadrados, os coeficientes têm a forma fechada (Deisenroth, Faisal & Ong, 2020):

$$ \hat\beta=(X^TX)^{-1}X^Ty $$

onde $X$ é a matriz de dados (uma linha por exemplo) e $y$ o vetor de respostas. A inversa só existe se $X^TX$ for invertível, isto é, se as colunas de $X$ forem linearmente independentes; atributos redundantes quebram a fórmula. E, como na seção 11, a fórmula é conceitual: Deisenroth, Faisal e Ong (2020) observam que, por precisão numérica, em geral não se recomenda calcular a inversa, e o próprio texto deles trata $(X^TX)\hat\beta = X^Ty$ como um sistema a resolver. O artigo de regressão linear da trilha de Machine Learning desenvolve esse caminho; mais adiante nesta série, as decomposições QR e SVD mostram por que podem ser preferíveis.

Pseudoinversa

Quando a matriz é retangular ou singular, a inversa comum não existe, mas existe uma generalização, a pseudoinversa de Moore-Penrose, escrita $A^+$. Penrose (1955) mostrou que ela existe para qualquer matriz, inclusive retangular, e a usou para resolver equações matriciais lineares. Quando $Ax=y$ não tem solução, ela devolve o $x$ que deixa $Ax$ o mais perto possível de $y$; quando há infinitas soluções, devolve a de menor norma (Goodfellow, Bengio & Courville, 2016). Ela aparece em mínimos quadrados, em sistemas com mais equações que incógnitas (ou menos) e na SVD, e é calculada no NumPy por np.linalg.pinv, via SVD (NumPy, 2026).

Representações: quando dá para voltar

Se uma camada faz $z=Wx$ com $W$ quadrada e invertível, em princípio a representação original pode ser recuperada:

$$ x\xrightarrow{\;W\;}z\xrightarrow{\;W^{-1}\;}x $$

Se $W$ reduz a dimensão (por exemplo, de 768 para 128), a reconstrução perfeita deixa de ser possível sem estrutura adicional, pela mesma razão da projeção da seção 4. Um autoencoder aceita essa perda de propósito: um codificador comprime a entrada num código pequeno, e um decodificador aprende a reconstruí-la (Hinton & Salakhutdinov, 2006). O decodificador não é a inversa matemática do codificador; o modelo é construído justamente para copiar a entrada só de forma aproximada, e, ao escolher o que preservar, aprende propriedades úteis dos dados (Goodfellow, Bengio & Courville, 2016).

No extremo oposto estão as redes desenhadas para serem exatamente invertíveis, como os normalizing flows que apareceram na Aula 07. Na Real NVP, as camadas são transformações invertíveis e treináveis, o que permite calcular a verossimilhança de forma exata e percorrer o caminho nos dois sentidos, também de forma exata: do código aos dados, para gerar amostras, e dos dados ao código, para inferir as variáveis latentes (Dinh, Sohl-Dickstein & Bengio, 2017). O detalhe curioso é que cada camada de acoplamento é invertível mesmo usando, por dentro, redes $s$ e $t$ que não são: a inversa não exige inverter $s$ nem $t$, e o jacobiano da camada é triangular, de modo que o determinante da Aula 07 entra na verossimilhança como o produto da diagonal (Dinh, Sohl-Dickstein & Bengio, 2017). A pergunta desta aula, "existe caminho de volta?", vira ali um requisito de arquitetura.

14. Exercícios

1. Considere $A=\begin{bmatrix}2&0\\0&4\end{bmatrix}$. Qual deve ser $A^{-1}$? Explique usando a interpretação de escala.

2. Para $A=\begin{bmatrix}2&1\\1&1\end{bmatrix}$, calcule $\det(A)$ e diga se a matriz possui inversa.

3. Para $A=\begin{bmatrix}1&2\\2&4\end{bmatrix}$, explique por que ela não possui inversa usando: determinante, geometria e perda de informação.

4. Se $y=Ax$ e conhecemos $y$, qual operação permite recuperar $x$ quando $A$ é invertível?

5. Resolva:

$$ \begin{cases} 2x+y=5\\ x+y=3 \end{cases} $$

6. Se $C=BA$, qual é $C^{-1}$? Explique por que a ordem é invertida.

7. Por que, em programação, np.linalg.solve(A, b) costuma ser melhor do que np.linalg.inv(A) @ b quando o único objetivo é resolver $Ax=b$?

8. Questão principal. Explique com suas palavras a diferença entre transformar um vetor e desfazer uma transformação. Relacione

$$ x\xrightarrow{\;A\;}y\xrightarrow{\;A^{-1}\;}x $$

com a perda de informação quando a transformação é singular.

O que guardar

O mapa da aula cabe numa figura: o determinante decide se existe caminho de volta, e o caminho de volta é $A^{-1}$.

Mapa mental: a matriz A gera uma transformação; se det(A) diferente de zero, A é invertível, existe A inversa, A inversa vezes A é a identidade, a transformação pode ser desfeita e Ax = b tem x = A inversa b; se det(A) = 0, uma dimensão colapsou, a informação se perdeu e não há inversa
Dois ramos a partir do determinante: com det ≠ 0 há caminho de volta; com det = 0, uma dimensão sumiu e não há.

Quando olhar para $A^{-1}$, pense:

$$ \boxed{A^{-1}=\text{a transformação que desfaz }A} $$

  • $A^{-1}A=AA^{-1}=I$.
  • Para matrizes quadradas, $A^{-1}$ existe se e somente se $\det(A)\neq0$, se e somente se as colunas são independentes.
  • $(BA)^{-1}=A^{-1}B^{-1}$ e $\det(A^{-1})=1/\det(A)$.
  • Em código, resolva $Ax=b$ com solve; reserve inv para quando a inversa em si for o objetivo; e olhe o número de condição antes de confiar na resposta.
Uma transformação só pode ser desfeita perfeitamente quando não destruiu a informação necessária para reconstruir a entrada.

Com esta aula, a sequência da série fica assim:

Na Aula 09, Sistemas lineares, eliminação de Gauss e posto da matriz, o assunto é $Ax=b$ sem depender da inversa: sistemas determinados, superdeterminados e subdeterminados, eliminação de Gauss, escalonamento, pivôs, posto, dependência linear e as condições de existência e unicidade de solução.

Referências

  1. Goodfellow, Ian; Bengio, Yoshua; Courville, Aaron. Deep Learning. MIT Press, 2016. Cap. 2 e cap. 14. www.deeplearningbook.org/contents/linear_algebra.html; www.deeplearningbook.org/contents/autoencoders.html
  2. Deisenroth, Marc Peter; Faisal, A. Aldo; Ong, Cheng Soon. Mathematics for Machine Learning. Cambridge University Press, 2020. doi.org/10.1017/9781108679930
  3. NumPy. numpy.linalg.inv, numpy.linalg.solve, numpy.linalg.cond e numpy.linalg.pinv. Documentação oficial do NumPy, v2.5, 2026. Acesso em 2 out. 2026. numpy.org/doc/stable/reference/generated/numpy.linalg.inv.html; numpy.org/doc/stable/reference/generated/numpy.linalg.solve.html; numpy.org/doc/stable/reference/generated/numpy.linalg.cond.html; numpy.org/doc/stable/reference/generated/numpy.linalg.pinv.html
  4. LAPACK. DGESV: solução de sistemas lineares A·X = B. Documentação de referência, netlib. Acesso em 2 out. 2026. netlib.org/lapack/lapack-3.1.1/html/dgesv.f.html
  5. Moler, Cleve B. Numerical Computing with MATLAB. SIAM, 2004. Cap. 2, Linear Equations. doi.org/10.1137/1.9780898717952
  6. Bishop, Christopher M. Pattern Recognition and Machine Learning. Springer, 2006. microsoft.com/en-us/research/publication/pattern-recognition-machine-learning
  7. Penrose, Roger. A generalized inverse for matrices. Mathematical Proceedings of the Cambridge Philosophical Society, v. 51, n. 3, p. 406–413, 1955. doi.org/10.1017/S0305004100030401
  8. Hinton, Geoffrey E.; Salakhutdinov, Ruslan R. Reducing the Dimensionality of Data with Neural Networks. Science, v. 313, n. 5786, p. 504–507, 2006. doi.org/10.1126/science.1127647
  9. Dinh, Laurent; Sohl-Dickstein, Jascha; Bengio, Samy. Density estimation using Real NVP. International Conference on Learning Representations (ICLR), 2017. arxiv.org/abs/1605.08803
Gostou do artigo? Compartilhe. Conhecimento ganha força quando circula.

Esta aula faz parte do AI Lab, o laboratório aberto de estudo da MirandasTech. Código, notebooks e exercícios: 01-math/aulas/08-matriz-inversa-desfazendo-transformacoes.md.