matriz inversa: [ Ejercicio ] [ Analítico ] [ Algoritmo ] [ Función ]
..
1. Ejercicio
Referencia: Chapra 10.2 p292, Burden 6.3 p292, Rodríguez 4.2.5 Ejemplo 1 p118
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]])
matriz inversa: [ Ejercicio ] [ Analítico ] [ Algoritmo ] [ Función ]
..
2. Desarrollo analítico
Para el procedimiento, se crea la matriz aumentada de A con la identidad I.
AI = A|I
\begin{pmatrix} 4 & 2 & 5 & 1 & 0 & 0\\ 2 & 5 & 8 & 0 & 1 & 0 \\ 5 & 4 & 3 & 0 & 0 & 1 \end{pmatrix}[[ 4. 2. 5. 1. 0. 0. ] [ 2. 5. 8. 0. 1. 0. ] [ 5. 4. 3. 0. 0. 1. ]]
Con la matriz aumentada AI se repiten los procedimientos aplicados en el método de Gauss-Jordan:
- pivoteo parcial por filas
- eliminación hacia adelante
- eliminación hacia atras
De la matriz aumentada resultante, se obtiene la inversa A-1 en la mitad derecha de AI, lugar que originalmente correspondía a la identidad.
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]]\begin{pmatrix} 0.2 & -0.16470588 & 0.10588235 \\ -0.4 & 0.15294118 & 0.25882353 \\ 0.2 & 0.07058824 & -0.18823529 \end{pmatrix}
Verifica resultado
El resultado se verifica realizando la operación producto punto entre A y la inversa, que debe resultar la matriz identidad.
A.A-1 = I
El resultado de la operación es una matriz identidad. Observe que los valores del orden de 10-15 o menores se consideran como casi cero o cero.
A.inversa = identidad [[ 1.00000000e+00 -1.38777878e-17 -1.38777878e-16] [ 2.22044605e-16 1.00000000e+00 -2.22044605e-16] [ 5.55111512e-17 -9.71445147e-17 1.00000000e+00]]
matriz inversa: [ Ejercicio ] [ Analítico ] [ Algoritmo ] [ Función ]
..
3. Algoritmo en Python
El algoritmo que describe el proceso en python:
# Matriz Inversa con Gauss-Jordan # 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]], dtype=float) # PROCEDIMIENTO casicero = 1e-15 # Considerar como 0 # matriz identidad tamano = np.shape(A) n = tamano[0] identidad = np.identity(n) # Matriz aumentada AB = np.concatenate((A,identidad),axis=1) AB0 = np.copy(AB) # Pivoteo parcial por filas tamano = np.shape(AB) n = tamano[0] m = tamano[1] # Para cada fila en AB for i in range(0,n-1,1): # columna desde diagonal i en adelante columna = abs(AB[i:,i]) dondemax = np.argmax(columna) # dondemax no está en diagonal if (dondemax !=0): # intercambia filas temporal = np.copy(AB[i,:]) AB[i,:] = AB[dondemax+i,:] AB[dondemax+i,:] = temporal AB1 = np.copy(AB) # eliminacion hacia adelante for i in range(0,n-1,1): pivote = AB[i,i] adelante = i+1 for k in range(adelante,n,1): factor = AB[k,i]/pivote AB[k,:] = AB[k,:] - AB[i,:]*factor AB2 = np.copy(AB) # elimina hacia atras ultfila = n-1 ultcolumna = m-1 for i in range(ultfila,0-1,-1): pivote = AB[i,i] atras = i-1 for k in range(atras,0-1,-1): factor = AB[k,i]/pivote AB[k,:] = AB[k,:] - AB[i,:]*factor # diagonal a unos AB[i,:] = AB[i,:]/AB[i,i] inversa = np.copy(AB[:,n:]) # SALIDA print('Matriz aumentada:') print(AB0) print('Pivoteo parcial por filas') print(AB1) print('eliminacion hacia adelante') print(AB2) print('eliminación hacia atrás') print(AB) print('Inversa de A: ') print(inversa)
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 -1.38777878e-17 -1.38777878e-16] [ 2.22044605e-16 1.00000000e+00 -2.22044605e-16] [ 5.55111512e-17 -9.71445147e-17 1.00000000e+00]]
Observe que el algoritmo se pude reducir si usan los procesos de Gauss-Jordan como funciones.
Tarea: Realizar el algoritmo usando una función creada para Gauss-Jordan
matriz inversa: [ Ejercicio ] [ Analítico ] [ Algoritmo ] [ Función ]
..
4. Función en Numpy
La función en la librería Numpy es np.linalg.inv()
:
>>> np.linalg.inv(A) array([[ 0.2 , -0.16470588, 0.10588235], [-0.4 , 0.15294118, 0.25882353], [ 0.2 , 0.07058824, -0.18823529]]) >>>
matriz inversa: [ Ejercicio ] [ Analítico ] [ Algoritmo ] [ Función ]