Um erro que pode encontrar em Python é:
numpy.linalg.LinAlgError: Matriz singular
Este erro ocorre quando se tenta inverter uma matriz singular, que por definição é uma matriz que tem um determinante de zero e não pode ser invertida.
Este tutorial partilha a forma de resolver este erro na prática.
Como reproduzir o erro
Suponhamos que criamos a seguinte matriz utilizando NumPy:
import numpy as np #criar matriz 2x2 minha_matriz = np. array ([[1., 1.], [1., 1.]]) #exibir matriz print (minha_matriz) [[1. 1.] [1. 1.]]
Agora suponhamos que tentamos utilizar o inv() do NumPy para calcular a inversa da matriz:
from numpy import inv #tentativa de inverter a matriz inv(my_matrix) numpy.linalg.LinAlgError: Matriz singular
Recebemos um erro porque a matriz que criámos não tem uma matriz inversa.
Nota : Veja esta página do Wolfram MathWorld que mostra 10 exemplos diferentes de matrizes que não têm matriz inversa.
Por definição, uma matriz é singular e não pode ser invertida se tiver um determinante igual a zero.
É possível utilizar o det() do NumPy para calcular o determinante de uma dada matriz antes de a tentar inverter:
from numpy import det #calcular determinante da matriz det(minha_matriz) 0.0
O determinante da nossa matriz é zero, o que explica o facto de termos encontrado um erro.
Como corrigir o erro
A única forma de contornar este erro é simplesmente criar uma matriz que não seja singular.
Por exemplo, suponhamos que utilizamos o inv() para inverter a seguinte matriz:
import numpy as np from numpy. linalg import inv, det #criar matriz 2x2 que não seja singular minha_matriz = np. array ([[1., 7.], [4., 2.]]) #exibir matriz print (minha_matriz) [[1. 7.] [4. 2.]] #calcular determinante da matriz print (det(minha_matriz)) -25.999999999993 #calcular inversa da matriz print (inv(minha_matriz)) [[-0.07692308 0.26923077] [ 0.15384615 -0.03846154]]
Não recebemos qualquer erro ao inverter a matriz porque a matriz não é singular.