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.