La seudoinversa de Moore-Penrose es una generalización de la inversa de una matriz que puede aplicarse incluso si la matriz no es cuadrada o no es invertible. En Python, puedes calcularla fácilmente con NumPy.
📌 ¿Qué es la seudo inversa?
Para una matriz A∈Rm×nA \in \mathbb{R}^{m \times n}, su seudoinversa A+A^+ satisface ciertas propiedades algebraicas. Se define mediante la descomposición en valores singulares (SVD):
A=UΣVT⇒A+=VΣ+UTA = U \Sigma V^T \quad \Rightarrow \quad A^+ = V \Sigma^+ U^T
Donde:
- Σ+\Sigma^+ se obtiene invirtiendo los valores singulares distintos de cero y transponiendo la matriz.
💻 Cálculo con NumPy
✅ Usando np.linalg.pinv
import numpy as np
A = np.array([[1, 2], [3, 4], [5, 6]]) # Matriz no cuadrada
A_pseudo = np.linalg.pinv(A)
print("Matriz original A:")
print(A)
print("\nSeudo inversa de A (Moore-Penrose):")
print(A_pseudo)
🧠 ¿Qué hace NumPy internamente?
np.linalg.pinv utiliza la SVD para calcular la seudo inversa:
U, S, Vt = np.linalg.svd(A, full_matrices=False)
# Invertimos los valores singulares (evitando dividir por cero)
S_inv = np.diag(1 / S)
# Calculamos la seudoinversa manualmente
A_pseudo_manual = Vt.T @ S_inv @ U.T
📘 Aplicación: resolver sistemas sobredeterminados
Para sistemas Ax=bAx = b donde AA no es cuadrada:
x = np.linalg.pinv(A) @ b
Esto da la solución de mínimos cuadrados: la mejor aproximación posible.
✅ Ventajas
- Funciona con matrices rectangulares o singulares.
- Muy útil en regresión lineal, ML, ajuste de curvas, y optimización.