Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

¿Qué es una pseudo inversa de Moore Penrose y cómo calcularla?

13/18
Recursos

La pseudo inversa de Moore Penrose es una aplicación directa de SVD, que nos permite resolver en determinados momentos sistemas de ecuaciones lineales con múltiples soluciones. Es utilizada cuando en un sistema de ecuaciones lineales representado por Ax = B, x no tiene inversa. Esta operación es única y existe si se verifican 4 condiciones.

Cómo calcular la pseudo inversa de Moore Penrose

Para calcularla se siguen los siguientes pasos:

  • Calcular las matrices U, D, y V (matrices SVD) de A.
  • Construir D_pse: una matriz de ceros que tiene igual dimension de A, y que luego se transpone.
  • Reemplazar la submatriz D_pse[: D.shape[0], : D.shape[0]] por np.linalg.inv(np.diag(D))
  • Reconstruir pseudoinversa: A_pse = V.T.dot(D_pse).dot(U.T)

Cómo calcular la pseudo inversa de Moore Penrose en Python

Para calcularla automaticamente por Python: np.linalg.pinv(A)
Lo que obtenemos con A_pse es una matriz muy cercana a la inversa. Cercano en el sentido de que minimiza la norma dos de estas distancias. O sea, de estos errores que estamos cometiendo.

A_pse no es conmutativa, es decir, A_pse·A ≠ A·A_pse

Aporte de María José Medina

Aportes 13

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

El mejor curso por lejos!!!

Resumen

  • La pseudo inversa de Moore Penrose es utilizada cuando en un sistema de ecuaciones lineales representado por Ax = B, x no tiene inversa.
  • La pseudo inversa de MP es única y existe si se verifican 4 condiciones.
  • Para calcularla se siguen los siguientes pasos:
  1. Calcular las matrices U, D, y V (matrices SVD) de A.
  2. Construir D_pse: una matriz de ceros que tiene igual dimension de A, y que luego se transpone.
  3. Reemplazar la submatriz D_pse[: D.shape[0], : D.shape[0]] por np.linalg.inv(np.diag(D))
  4. Reconstruir pseudoinversa: A_pse = V.T.dot(D_pse).dot(U.T)

Notas

  • Para calcularla automaticamente por Python: np.linalg.pinv(A)
  • Lo que obtenemos con A_pse es una matriz muy cercana a la inversa. Cercano en el sentido de que minimiza la norma dos de estas distancias. O sea, de estos errores que estamos cometiendo.
  • A_pse no es conmutativa, es decir, A_pse·A ≠ A·A_pse
  • La forma en que python obtiene la pseudo inversa es con el método SVD.
  • SVD es mas certera, y computacionalmente más efectiva.





  • La pseudo inversa de Moore Penrose es una aplicación directa de SVD, que nos permite resolver en determinados momentos sistemas de ecuaciones lineales con múltiples soluciones.

Por si quieren conocer las condiciones para que exista la pseudo inversa de M-P:

me duele la cabeza :v

tengo una confusión (luego de haber pasado un rato buscando el teorema por internet)… por que python entrega un U de m,m?.. no debería ser de m,n para que la propiedad de A = UDV.T … sino no se podría multiplicar

import numpy as np
np.set_printoptions(suppress=True)

A =np.array([[2,3],[5,7],[11,13]])
print(A)

U,D,V = np.linalg.svd(A)
print("\nU\n",U)
print("\nD\n",D)
print("\nV\n",V)

D_pse = np.zeros((A.shape[0], A.shape[1])).T

print("\nD_pse\n",D_pse)

D_pse[😄.shape[0], 😄.shape[0]] = np.linalg.inv(np.diag(D))
print("\nValores a pondremos en D_pse\n",D_pse)

A_pse= V.T.dot(D_pse).dot(U.T)
print("\nA_pse\n",A_pse)

A_pse_calc= np.linalg.pinv(A)
print("\npseCalc\n",A_pse_calc)

np.set_printoptions(suppress=False)
print("\nA_pse.dot(A)\n",A_pse.dot(A))

print("\nA_pse\n",A.dot(A_pse))

A_pse_2 = np.linalg.inv(A.T.dot(A)).dot(A.T)
print("\nA_pse_2\n",A_pse_2)

Me sale una “matriz identidad” diferente a la del profesor:

print(A_pse_calc.dot(A))
[[ 1.00000000e+00  6.66133815e-16]
 [-6.66133815e-16  1.00000000e+00]]

La matriz de penrose existe y es unica

nunca había escuchado de una pseudo inversa,eso esta muy loco

ahora todo va tomando forma. excelente curso y profesor