Solución de Sistemas Lineales usando la Inversa de una Matriz
Resumen
¿Cómo utilizar la matriz inversa para resolver un sistema de ecuaciones lineales?
Las matrices inversas son herramientas poderosas en álgebra lineal que nos permiten encontrar soluciones a sistemas de ecuaciones lineales. Imagina que tienes un sistema matemático que resolver y deseas utilizar una matriz inversa; hacerlo podría simplificar mucho el proceso. Vamos a profundizar en cómo se hace esto paso a paso usando Python.
¿Cómo definir matrices y vectores en Python?
Primero, definimos nuestras matrices y vectores utilizando la biblioteca NumPy, que es muy útil para el manejo de datos numéricos en Python. Para un sistema de ecuaciones sencillo, donde tenemos las ecuaciones (3x + y = 1) y (2x + y = 1), organizamos la matriz de coeficientes y el vector de resultados así:
import numpy as np
# Definición de la matriz AA = np.array([[3,1],[2,1]])# Definición del vector BB = np.array([1,1])
¿Cómo calcular la matriz inversa?
El siguiente paso es calcular la matriz inversa de (A). En álgebra lineal, si una matriz ( A ) tiene una inversa, significa que podemos multiplicarla por su inversa para obtener la matriz identidad. En Python:
# Calcular la matriz inversa de Ainversa_A = np.linalg.inv(A)
¿Cómo resolver el sistema de ecuaciones?
Una vez obtenida la matriz inversa, podemos encontrar la solución ( X ) multiplicando esta inversa por el vector ( B ):
# Calcular el vector solución XX = np.dot(inversa_A, B)
El resultado te dará los valores de ( x ) y ( y ) que solucionan el sistema. En nuestro caso, el vector ( X ) debería ser muy similar a ([0, 1]), lo que corresponde a ( x = 0 ) y ( y = 1 ).
¿Qué pasa si cambiamos el vector de resultados?
Si cambias ( B ) para ver si la misma matriz inversa puede ayudarnos a resolver otra configuración de resultados, tendrías algo así:
# Nuevo vector BB_nuevo = np.array([3,7])# Calcular el nuevo vector solución X usando la misma inversaX_nuevo = np.dot(inversa_A, B_nuevo)
Este enfoque te proporciona la solución para cualquier vector ( B ) dado, siempre que los coeficientes de las variables en las ecuaciones permanezcan iguales.
¿Cuáles son las limitaciones del uso de matrices inversas?
Aunque resolver sistemas de ecuaciones lineales usando matrices inversas es conveniente, no es siempre eficiente debido a problemas numéricos que pueden surgir, especialmente cuando lidias con matrices grandes o mal condicionadas. A menudo, otras técnicas como la eliminación Gaussiana o métodos numéricos de aproximación pueden ser más adecuados.
¿Por qué es importante la práctica de métodos numéricos?
Los métodos numéricos se utilizan para encontrar soluciones aproximadas a ecuaciones y no dependen de las ineficiencias inherentes a las matrices inversas en representaciones computacionales. Saber cuándo y cómo utilizar diferentes métodos es esencial para quienes trabajan con álgebra lineal y problemas matemáticos complejos en la práctica.
¿Te interesa seguir explorando esta rica área de las matemáticas computacionales? ¡Sigue practicando, afina tus habilidades y aprovecha al máximo estas herramientas fascinantes!
En terminos un poco mas generales, funciona como un simple despeje :D
👍🥇
Gracias!! todos los ejemplos ilustrados siempre ayudan un montón
La verdad es que este instructor es muy bueno, explica super claro, me hubiera encantado ver algebra linear con python en la u.
Recomendaría este instructor (si él sabe) para el curso de probabilidad y estadística con python, que diferencia de pedagogía. 😀👍🏼
Si, es muy bueno. No se enrrolla con sus explicaciones :D
Solución de un sistema linear de ecuaciones
Podemos usar la matriz inversa para solucionar un sistema linear de ecuaciones:
Ax=b
A_inversa A x = A_inversa b
I x = A_inversa b
x = A_inversa b #el orden es muy importante
Nota:
Para aproximar resultados cercanos a cero como cero usamos:
np.set_pritnoptions(supress=0)
El orden si afecta el resultado! ⭐
.
A*x = b
.
A^-1 * A * x = A^-1 * b
.
A^-1A = Identidad
.
Ix = A^-1 * b
.
x = A^-1 * b
Exacto, por eso digo que el orden es muy importante
Siempre y cuando los coeficientes de las ecuaciones sean los mismos podemos usar la misma matriz inversa para solucionar un sistema con diferentes valores de "b"
Donde b es resultado, a es matriz y x vector mutiplicador
Aplicación de la inversa de una matriz para resolver un sistema de ecuaciones lineales
Para resolver un sistema de ecuaciones lineales utilizamos ecuaciones matriciales.
Un ejemplo, siendo:
import numpy as np
# La siguiente linea de codigo nos sirve para que redonde a 0 cuando un numero# esta muy proximo a este y no nos es demasiado util manejar tantos decimales.np.set_printoptions(suppress=True)A = np.array([[3,1],[2,1]])b = np.array([[1],[1]])# Ahora para despejar x multiplico la inversa de A a la izquierda de ambos lados# de la ecuacion. Quedandonos de la siguiente manera:# A*x = b ==> inv_A*A*x = inv_A*b ==> I*x = inv_A*b ==> x = inv_A*binv_A = np.linalg.inv(A)# Ahora x es igual a:x = inv_A.dot(b)
Como se sabe que la solucion es x = inversa.dot(b) y no es x = b.dot(inversa). Ya que la multiplicar matrices no es conmutativo como se hace para saber cual debe multiplicar a cual?
Lo que ocurre es que en la ecuación Ax=b debemos MULTIPLICAR POR LA IZQUIERDA en ambos lados de la igualdad por la MATRIZ INVERSA DE A, ya que si multiplicamos por la derecha en ambos lados de la igualdad AxA*=bA* la expresión de la derecha no garantiza que se "despeje" x. En la literatura se le suele llamar producto por la derecha o la izquierda.
y = 2x+1
y=3x-2
2x+1 = 3x-2
x = 3
y = 7
Bien .
Las operaciones son:
Ax = b => x = A^-1b
Asi es.
De forma completa sería:
Ax = b
A^-1Ax=A^-1b
Como A^-1A = Identidad
Ix = A^-1b
x = A^-1b
La inversa de una matriz puede ser utilizada para resolver un sistema de ecuaciones lineales de la forma Ax = b, donde Aes una matriz conocida de coeficientes, xes un vector de incógnitas y bes un vector conocido de términos independientes.
Para resolver el sistema, primero debemos asegurarnos de que la matriz Ano es singular, es decir, que tiene una matriz inversa. Si Ano es singular, podemos multiplicar ambos lados de la ecuación por la matriz inversa de Apara obtener:
import numpy as np
# Definir la matriz de coeficientes A y el vector de términos independientes b
A= np.array([[2,1,1],[4,-6,0],[-2,7,2]])b = np.array([5,-2,9])# Calcular la matriz inversa de AA_inv= np.linalg.inv(A)# Resolver el sistema de ecuaciones lineales
x = np.dot(A_inv, b)print(x)
La función np.set_printoptions(suppress=True) es una función de NumPy que cambia las opciones de impresión para las matrices de NumPy. Específicamente, establece la opción de impresión para suprimir el uso de la notación científica al imprimir números de punto flotante en matrices.
no entiendo, explica todo el proceso de solución de un sistema de ecuaciones aplicando la inversa de una matriz pero al final de la clase indica que no lo podemos usar. ¿?
No es que el proceso sea erróneo, sino que es ineficiente al momento de hacer cálculos más grandes
muy claro
buena aclaracion
Solo me queda la duda, ¿por qué en las primeras clases declaraba un vector de la siguiente manera?:
vector = np.array([1,2])
Pero ahora lo hace de la siguiente:
vector = np.array([[1],[2]])
el primero es un vector "fila" y el segundo es un vector "columna"
Muchas gracias!
Solo una cosa más...Eso hace alguna diferencia matemáticamente o solo es por algo del lenguaje?
Si configuras como False obtienes este resultado
[[1.11022302e-16]
[1.00000000e+00]]
pero si es True
[[0.]
[1.]]
PORQUE?
Para efectos practicos puedes decir que son los mismos valores:
1.11022302e-16 tiene exponente -16, sería como tener 0.000000000000000111022 valor que puedes aproximar a 0 perfectamente
Ahora para el valor:
1.00000000e+00 tiene exponente 0 sería como multiplicar por 10^0 = 1 es decir
1.00000000*1 nuevamente para efectos practicos puedes aproximar 1 sin problemas
¡Excelente! Resolver sistemas de ecuaciones lineales usando la inversa de una matriz es una técnica clásica del álgebra lineal cuando el sistema se puede representar como:
AX=BAX = B
Donde:
AA es la matriz de coeficientes (cuadrada).
XX es el vector columna de incógnitas.
BB es el vector columna de resultados.
✅ Paso a Paso para Resolver AX=BAX = B con la Inversa
📌 1. Verifica que AA sea cuadrada y no singular (determinante ≠ 0)
📌 2. Calcula la inversa de A: A−1A^{-1}
📌 3. Multiplica ambos lados por A−1A^{-1}:
A−1AX=A−1B⇒IX=A−1B⇒X=A−1BA^{-1}AX = A^{-1}B \Rightarrow IX = A^{-1}B \Rightarrow X = A^{-1}B
# Matriz de coeficientes A
A = np.array([[2, 1],
[5, 3]])
# Vector de resultados B
B = np.array([[5],
[13]])
# Verificamos si A tiene inversa
if np.linalg.det(A) != 0:
A_inv = np.linalg.inv(A)
X = A_inv @ B
print("Solución del sistema (x, y):")
print(X)
else:
print("La matriz A es singular. No tiene inversa.")
📌 Resultado
El código te devuelve el valor de xx y yy como solución del sistema.
⚠️ Consideraciones
Este método no es el más eficiente computacionalmente para grandes sistemas.
Es ideal para análisis teórico o sistemas pequeños.
Para sistemas grandes o mal condicionados, se prefiere np.linalg.solve(A, B).
🔄 Alternativa más eficiente:
X = np.linalg.solve(A, B) # Resuelve directamente sin calcular la inversa
<u>DATO:</u>
En una matriz cuadrada de orden 2x2 la matriz inversa se hablla cambiando los elemntos de la diagonal principal y invirtiendo los signos de la diagonal secundaria SIWMPE CUMPLE
Aplicación de la inversa de una matriz para resolver un sistema de ecuaciones lineales
Ahora que hemos aprendido a calcular la inversa de una matriz, podemos utilizar este conocimiento para resolver sistemas de ecuaciones lineales.
Supongamos que tenemos $3x + y = 1$ y $2x + y = 1$.
!Untitled
Después de traducir estas ecuaciones a formato matricial, podemos proceder a resolverlas utilizando programación.
import numpy as np
# Config para quitar decimales en los resultados para leerlos mejornp.set_printoptions(suppress=True)# Definimos la matriz de coeficientes AA = np.array([[3,1],[2,1]])# Definimos el vector columna bb = np.array([[1],[1]])# Calculamos la inversa de la matriz AA_inv = np.linalg.inv(A)print("Matriz Inversa de A:")print(A_inv)# Calculamos la solución del sistema de ecuaciones Ax = bx = A_inv.dot(b)print("Solución del Sistema de Ecuaciones (x):")print(x)# Verificamos la solución calculadacheck = A.dot(x)print("Verificación de la Solución (A * x):")print(check)
Este algoritmo nos permite resolver sistemas de ecuaciones lineales de manera eficiente utilizando el cálculo matricial. Sin embargo, es esencial traducir correctamente las ecuaciones al formato matricial y asegurarnos de que el sistema sea compatible y no singular para obtener resultados precisos.
Con este enfoque, podemos abordar una amplia gama de problemas de álgebra lineal y resolverlos de manera confiable mediante programación.
Redondear matriz
#para redondear a cero lo números muy cercanos
a cero (que tan cercanos ?)
usamos np.set_printoptions(suppress = True)
ejemplo:
np.set_printoptions(suppress = True)
A = np.array([[1,0.00000005],[1,6]])
print(A)
[[1. 0.00000005]
[1. 6. ]]
NO REDONDEA MUCHO JEJE, HAY PONERLE VARIOS CEROS MAS PARA QUE LO HAGA