3.4.2 Gauss-Jordan Inversa Ejemplo01

Referencia: Chapra 10.2 p292, pdf 316; Rodriguez Cap.4.2.5 Ejemplo 1 pdf.118

Obtener la inversa de una matriz usando el método de Gauss-Jordan, a partir de la matriz:

A = np.array([[4,2,5],
              [2,5,8],
              [5,4,3]])

Para el proceso se utiliza la matriz aumentada de A con la identidad.

AI = A|I

[[  4.    2.    5.   1.    0.    0. ]
 [  2.    5.    8.   0.    1.    0. ]
 [  5.    4.    3.   0.    0.    1. ]]

Con la matriz aumentada AI  se repite el proceso de Gauss-Jordan.

La inversa se encuentra en la mitad derecha de AI, lugar que originalmente correspondía a la identidad .

El algoritmo que describe el proceso en python:

# Método de Gauss para inversa de A
# AI es la matriz aumentada A con Identidad
# Se aplica Gauss-Jordan(AI)
import numpy as np

# INGRESO
A = np.array([[4,2,5],
              [2,5,8],
              [5,4,3]])

# PROCEDIMIENTO
tamano = np.shape(A)
n = tamano[0]
m = tamano[1]

# Añade la matriz identidad
identidad = np.identity(n)
AI = np.concatenate((A,identidad), axis=1)
m = 2*m

# Gauss elimina hacia adelante
# tarea: verificar términos cero
casicero = 1e-15
for i in range(0,n,1):
    pivote = AI[i,i]
    adelante = i+1 
    for k in range(adelante,n,1):
        if (np.abs(pivote)>=casicero):
            factor = AI[k,i]/pivote
            AI[k,:] = AI[k,:] - factor*AI[i,:]
        else:
            factor = 'division para cero'
# Gauss-Jordan elimina hacia atras
ultfila = n-1
ultcolumna = m-1
for i in range(ultfila,0-1,-1):
    # Normaliza a 1 elemento diagonal
    AI[i,:] = AI[i,:]/AI[i,i]
    pivote = AI[i,i] # uno
    # arriba de la fila i
    atras = i-1 
    for k in range(atras,0-1,-1):
        if (np.abs(pivote)>=casicero):
            factor = AI[k,i]/pivote
            AI[k,:] = AI[k,:] - factor*AI[i,:]
        else:
            factor= 'division para cero'

inversa = AI[:,n:]

# Para verificar el resultado
verifica = np.dot(A,inversa)

# SALIDA
print('la matriz inversa es:')
print(inversa)

print('verificando A.inversa = identidad')
print(verifica)

el resultado buscado es:

la matriz inversa es:
[[ 0.2        -0.16470588  0.10588235]
 [-0.4         0.15294118  0.25882353]
 [ 0.2         0.07058824 -0.18823529]]
verificando A.inversa = identidad
[[  1.00000000e+00   2.77555756e-17   0.00000000e+00]
 [  0.00000000e+00   1.00000000e+00   0.00000000e+00]
 [ -5.55111512e-17   8.32667268e-17   1.00000000e+00]]

Observe que el algoritmo se pude reducir si usa el proceso de Gauss-Jordan como una función.

Tarea: Realizar el algoritmo usando una función creada para Gauss-Jordan