Matrizes Inversas usando Gauss

Para a disciplina de Álgebra Linear e Matricial por Ronan Soares

Matriz Inversa

$$A A^{-1} = I$$
$$\begin{bmatrix} a_{11} & a_{12}\\a_{21} & a_{22}\end{bmatrix} \begin{bmatrix}x_{11} & x_{12}\\x_{21} & x_{22}\end{bmatrix} = \begin{bmatrix}1 & 0\\0 & 1\end{bmatrix}$$
$$\begin{bmatrix} a_{11} & a_{12}\\a_{21} & a_{22}\end{bmatrix} \begin{bmatrix}\textcolor{magenta}{x_{11}} & x_{12}\\\textcolor{magenta}{x_{21}} & x_{22}\end{bmatrix} = \begin{bmatrix}\textcolor{cyan}{1} & 0\\\textcolor{cyan}{0} & 1\end{bmatrix}$$
$$\begin{bmatrix} a_{11} & a_{12}\\a_{21} & a_{22}\end{bmatrix} \begin{bmatrix}\textcolor{magenta}{x_{11}}\\\textcolor{magenta}{x_{21}}\end{bmatrix} = \begin{bmatrix}\textcolor{cyan}{1}\\\textcolor{cyan}{0}\end{bmatrix}$$
$$\begin{bmatrix} a_{11} & a_{12}\\a_{21} & a_{22}\end{bmatrix} \begin{bmatrix}x_{11} & \textcolor{magenta}{x_{12}}\\x_{21} & \textcolor{magenta}{x_{22}}\end{bmatrix} = \begin{bmatrix}1 & \textcolor{cyan}{0}\\0 & \textcolor{cyan}{1}\end{bmatrix}$$
$$\begin{bmatrix} a_{11} & a_{12}\\a_{21} & a_{22}\end{bmatrix} \begin{bmatrix}\textcolor{magenta}{x_{12}}\\\textcolor{magenta}{x_{22}}\end{bmatrix} = \begin{bmatrix}\textcolor{cyan}{0}\\\textcolor{cyan}{1}\end{bmatrix}$$

Resumindo

$e_i$ somente a $i$-ésima coordenada é $1$ o resto $0$

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

É o mesmo que resolver

$$A x = e_i \qquad \forall i$$

Pera aí! Resolver quantos sistemas?

$$A x = e_i \qquad \forall i$$

$n$ sistemas...

Mas $A$ é igual em todos...

Dá pra agilizar isso não?

Começo de Tentativa

$A$ é igual pra todos os sistemas...

O método da eliminação só depende de $A$...

Se fizermos a matriz mega aumentada $M = \begin{bmatrix}A \; I\end{bmatrix}$...

Terminamos com $M = \begin{bmatrix}A' \; I'\end{bmatrix}$...

Ainda vamos ter muito trabalho...

Gauss até Canônica

E se continuarmos mexendo em $M = \begin{bmatrix}A' \; I'\end{bmatrix}$...

Até termos $A'$ em forma canônica?

Como $A$ é quadrada vamos ter algo parecido com $\begin{bmatrix}I \; ?\end{bmatrix}$

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Vamos lá...
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                                    for i in range(m):
                                        for j in range(i, n):
                                            pivo = M[i][j]
                                            # O pivô pode ser zero?
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                                    for i in range(m):
                                        for j in range(i, n):
                                            pivo = M[i][j]
                                            # O pivô pode ser zero? não!
                                            if pivo == 0:
                                                # Encontrar candidato bom
                                                # Trocar linhas
                                                # Se não encontrar passa para próxima coluna
                                            else:
                                                # Realizar a eliminação para baixo e para cima
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                                    for i in range(m):
                                        for j in range(i, n):
                                            pivo = M[i][j]
                                            # O pivô pode ser zero? não!
                                            if pivo == 0:
                                                pivo_alternativo = encontra_pivo(M, i + 1, j)
                                                if pivo_alternativo == 0:
                                                    continue # Essa coluna é uma variável livre.
                                            else:
                                                # Realizar a eliminação para baixo e para cima
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                                    for i in range(m):
                                        for j in range(i, n):
                                            pivo = M[i][j]
                                            if pivo == 0:
                                                # Faz o pivoteamento!
                                            else:
                                                # Realizar a eliminação para baixo e para cima
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                                    for i in range(m):
                                        for j in range(i, n):
                                            pivo = M[i][j]
                                            if pivo == 0:
                                                # Faz o pivoteamento!
                                            # Realizar a eliminação para baixo e para cima
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                                    for i in range(m):
                                        for j in range(i, n):
                                            pivo = M[i][j]
                                            if pivo == 0:
                                                # Faz o pivoteamento!
                                            # Realizar a eliminação para baixo e para cima
                                            for k in range(m):
                                                # Eliminar a[k][j]
                            
                        

Algoritmo de Canonização

                            
                                def canoniza(M, m, n):
                                    # Para cada candidato à pivô zerar abaixo e acima dele...
                                    for i in range(m):
                                        for j in range(i, n):
                                            pivo = M[i][j]
                                            if pivo == 0:
                                                # Faz o pivoteamento!
                                            # Realizar a eliminação para baixo e para cima
                                            for k in range(m):
                                                # Eliminar a[k][j]
                                                if k != i:
                                                    # M[k] <- M[k] - M[k][k] / pivo * M[i]
                                                    elimina(M[k], M[i], pivo)
                                    return M
                            
                        

Resultados

Depois de canonizar $A$

  • solução de $A'x = b'$ sai direto
  • tem $x_i$ livre ↔ $A$ singular
  • todos $x_i$ ligados ↔ $A' = I$ e $\begin{bmatrix}A' \; A^{-1}\end{bmatrix}$

Fim