Solución de Sistemas Sobredeterminados con Pseudo-Inversa y Python

Clase 14 de 18Curso de Álgebra Lineal Aplicada para Machine Learning

Resumen

¿Qué es un sistema de ecuaciones y cómo se resuelve?

Un sistema de ecuaciones es un conjunto de ecuaciones con varias incógnitas. Este sistema puede tener cero, una o infinitas soluciones. En situaciones donde el sistema tiene una solución única, esto indica que existe una matriz inversa y que la matriz es cuadrada con vectores linealmente independientes. Cuando buscamos una solución X tal que minimice una norma específica, podemos recurrir a un método llamado pseudo inversa.

¿Cómo aplicar la pseudo inversa para resolver un sistema?

La pseudo inversa es útil para encontrar una solución X que minimice la norma de a por X menos B en un sistema de ecuaciones lineales. Esto es importante en sistemas sobre determinados, donde hay más ecuaciones que incógnitas.

Visualización inicial con Python

Para abordar este problema con código, se pueden seguir estos pasos:

  1. Configuración de entorno y librerías: Inicialmente, se importa numpy como np y se utiliza matplotlib para visualizar gráficamente.

    import numpy as np
    import matplotlib.pyplot as plt
    
  2. Definición del dominio: Se establece un rango de valores de X para evaluar las ecuaciones del sistema:

    x = np.linspace(-5, 5, 1000)
    
  3. Definición de funciones: Se crean las funciones correspondientes a las tres ecuaciones del sistema:

    y1 = -4 * x + 3
    y2 = 2 * x + 5
    y3 = -3 * x + 1
    

Graficación del sistema

Las ecuaciones se grafican para visualizar su intersección:

plt.plot(x, y1, label='y1 = -4x + 3')
plt.plot(x, y2, label='y2 = 2x + 5')
plt.plot(x, y3, label='y3 = -3x + 1')
plt.xlim(-2, 2.5)
plt.ylim(-6, 6)
plt.legend()
plt.show()

En el gráfico, es evidente que las rectas definidas por estas ecuaciones no cruzan en un único punto común.

¿Cómo usar la pseudo inversa para encontrar el punto óptimo?

Para resolver este problema gráficamente y encontrar el punto que minimice la norma dos, seguimos estos pasos:

  1. Definir la matriz y el vector de soluciones:

    La matriz A se construye con los coeficientes de las ecuaciones:

    A = np.array([[4, 1], [-2, 1], [3, 1]])
    b = np.array([3, 5, 1])  # Vector de soluciones
    
  2. Calcular la pseudo inversa:

    Utilizamos numpy.linalg.pinv para calcularla:

    A_pseudo_inv = np.linalg.pinv(A)
    
  3. Encontrar la solución X:

    Multiplicamos la pseudo inversa de A con el vector b:

    X = A_pseudo_inv @ b
    

Este cálculo nos proporciona una solución que podemos interpretar gráficamente.

Interpretación gráfica y análisis

Al graficar nuevamente y añadir el punto encontrado:

plt.plot(x, y1, label='y1 = -4x + 3')
plt.plot(x, y2, label='y2 = 2x + 5')
plt.plot(x, y3, label='y3 = -3x + 1')
plt.scatter(X[0], X[1], color='red', zorder=5)  # Punto solución
plt.xlim(-2, 2.5)
plt.ylim(-6, 6)
plt.legend()
plt.show()

El punto solución no siempre se encuentra en el centro del "triángulo" formado por las ecuaciones debido al diferente peso que cada una ejerce sobre él, como una suerte de centro de gravedad.

La pseudo inversa proporciona una herramienta efectiva para manejar sistemas sobre determinados, ayudándonos a encontrar soluciones óptimas que norman la minimización. Siguiendo este enfoque, podemos comprender y resolver problemas complejos en la matemática aplicada. ¡Sigue adelante y continúa aprendiendo!