Inversa de una matriz cuadrada usando el método de Gauss

A partir del código elaborado en el artículo anterior, y con una modificación mínima, el ejercicio que se muestra en esta entrada permite obtener, buscando pivotes igual a 1 siempre que es factible, la inversa de una matriz usando el método de Gauss. Permite definir los datos de la matriz de forma manual o generarlos de forma aleatoria a partir de la dimensión de la matriz y los números entre los que crea esa matriz aleatoria. Se usa sympy y LaTeX/LyX con el paquete pythontex. Al final del artículo hay enlaces para descargar el fichero fuente así como el pdf que se obtendría con una de las matrices aleatorias de orden 3 que ha creado el propio programa.

En la web, así como con diferentes librerías de python, se puede obtener de forma directa la inversa de una matriz, de hecho así se obtiene la solución final y permite comprobar que el proceso seguido es correcto. De nuevo, para realizar el programa que permite su cálculo he partido de dos premisas:

  • Intentar buscar siempre que es posible pivotes 1 (mediante una función que implementa el Algoritmo de Euclides extendido)
  • Trabajar con fracciones lo mínimo posible.

El código python es muy parecido al que se usa para la resolución de sistemas usando el método de Gauss, se ha realizado una modificación mínima eliminando lo que no se necesita y se ha añadido

def trianSup():
    for j in range(dim-1,-1,-1):
        #hago uno en ese elemento de la diagonal de la matriz M[-1]
        if M[-1][j,j]!=1:
            C=Matrix(dim, dim, lambda f,c: 1 if ((f==c) and (f!=j)) else (1/M[-1][j,j] if ((f==c) and (f==j)) else 0))
            T.append(C)
            M.append(T[-1]*M[-1])
        #Hago ceros en los elementos de la columna j (salvo en el primer elemento)
        if j!=0:
            C=I+Matrix(dim, dim, lambda f,c: -M[-1][f,c] if ((f<c) and (c==j)) else 0)
            T.append(C)
            M.append(T[-1]*M[-1])

para conseguir la matriz triangular inferior a partir de la matriz triangular superior que calcula el programa anterior.

En el fichero LyX podemos modificar qué queremos que se haga en el problema:

  1. m

    datos <<a mano>>, en ese caso se deben establecer los valores de la matriz cuadrada con los que trabajar en el fichero.

  2. Con matrices aleatorias

    det1

    \(\rightarrow\) se obtiene una matriz aleatoria de determinante \(1\)

    detc

    \(\rightarrow\) se obtiene una matriz aleatoria de determinante un número distinto de \(0\)

Las opciones anteriores se consiguen modificando la variable:

#Tipo de matriz para hallar la inversa
tipo="detc"

El programa está preparado para hallar la inversa de una matriz cuadrada de cualquier orden, aunque si se opta por matrices de orden elevado y con determinante igual a 1 puede ser muy lento o incluso no terminar su ejecución. Para establecer los valores con los que trabajar, si se opta por matrices aleatorias, se pueden modificar las variables:

#orden de la matriz para los tipos aleatorios
dim=4
#valores entre los que obtener los números de las matrices aleatorias
v1=-5
v2=5

En el caso de optar por introducir las matrices <<a mano>> debemos modificarlas en:

if tipo=="m":
    #Datos del sistema
    # matriz de coeficientes
    A=Matrix([[1,2,-1],[2,0,2],[-1,1,1]])
    if A.det()==0:
        sys.exit("La matriz no tiene inversa ya que su determinante es igual a 0")
    dim=A.rank()

cambiando los datos de la matriz cuadrada a la que calcular la inversa.

Al compilar el fichero con la opción de una matriz aleatoria de orden 3 y determinante cualquiera, se ha obtenido un ejercicio como el que sigue:

Calcula por el método de Gauss la inversa de la matriz: \(A=\left(\begin{matrix}-3 & 2 & -1\\ -4 & -1 & -2\\ 3 & 1 & 0 \end{matrix}\right)\)

Solución

Escribamos la matriz ampliada y usemos Gauss:

\begin{align*} \begin{aligned} \left(\begin{matrix}-3 & 2 & -1 & 1 & 0 & 0\\ -4 & -1 & -2 & 0 & 1 & 0\\ 3 & 1 & 0 & 0 & 0 & 1 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & -F_{1}+F_{2}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & F_{3} \end{Bmatrix} & \longmapsto\\ \left(\begin{matrix}-1 & -3 & -1 & -1 & 1 & 0\\ -4 & -1 & -2 & 0 & 1 & 0\\ 3 & 1 & 0 & 0 & 0 & 1 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & -4F_{1}+F_{2}\\ F_{3} & \leftrightarrows & 3F_{1}+F_{3} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & -3 & -1 & -1 & 1 & 0\\ 0 & 11 & 2 & 4 & -3 & 0\\ 0 & -8 & -3 & -3 & 3 & 1 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{3}\\ F_{3} & \leftrightarrows & F_{2} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & -3 & -1 & -1 & 1 & 0\\ 0 & -8 & -3 & -3 & 3 & 1\\ 0 & 11 & 2 & 4 & -3 & 0 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & 4F_{2}+3F_{3}\\ F_{3} & \leftrightarrows & F_{3} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & -3 & -1 & -1 & 1 & 0\\ 0 & 1 & -6 & 0 & 3 & 4\\ 0 & 11 & 2 & 4 & -3 & 0 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & -11F_{2}+F_{3} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & -3 & -1 & -1 & 1 & 0\\ 0 & 1 & -6 & 0 & 3 & 4\\ 0 & 0 & 68 & 4 & -36 & -44 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & \frac{F_{3}}{4} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & -3 & -1 & -1 & 1 & 0\\ 0 & 1 & -6 & 0 & 3 & 4\\ 0 & 0 & 17 & 1 & -9 & -11 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & \frac{F_{3}}{17} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & -3 & -1 & -1 & 1 & 0\\ 0 & 1 & -6 & 0 & 3 & 4\\ 0 & 0 & 1 & 1/17 & -9/17 & -11/17 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}+F_{3}\\ F_{2} & \leftrightarrows & F_{2}+6F_{3}\\ F_{3} & \leftrightarrows & F_{3} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & -3 & 0 & -16/17 & 8/17 & -11/17\\ 0 & 1 & 0 & 6/17 & -3/17 & 2/17\\ 0 & 0 & 1 & 1/17 & -9/17 & -11/17 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}+3F_{2}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & F_{3} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}-1 & 0 & 0 & 2/17 & -1/17 & -5/17\\ 0 & 1 & 0 & 6/17 & -3/17 & 2/17\\ 0 & 0 & 1 & 1/17 & -9/17 & -11/17 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & -F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & F_{3} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 0 & 0 & -2/17 & 1/17 & 5/17\\ 0 & 1 & 0 & 6/17 & -3/17 & 2/17\\ 0 & 0 & 1 & 1/17 & -9/17 & -11/17 \end{matrix}\right)\end{aligned} \end{align*}

Por tanto:

\(A^{-1}=\begin{pmatrix}-2/17 & 1/17 & 5/17\\ 6/17 & -3/17 & 2/17\\ 1/17 & -9/17 & -11/17 \end{pmatrix}\)