es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pseudoinversa no está produciendo la salida correcta.

Tengo una serie de matrices de 2×2 que quiero invertir. Cuando uso pinv (ya sea pinv de numpy, pinv de scipy, o pinv2 de scipy), para algunas de ellas obtengo una respuesta con elementos del orden de -30, lo cual es mucho más pequeño de lo que debería ser. La matriz tiene un determinante grande (por lo tanto no nulo), por lo que es invertible. Si uso scipy.linalg.inv, funciona bien. Las matrices son similares entre sí y la mayoría de ellas funciona bien con pinv.

¿Alguien sabe qué podría estar sucediendo aquí?

Edición: Lo siento, olvidé incluir un ejemplo. Si tomo:

A = [[1e2, -1.6e9], [-1.6e9, 3e16]]

entonces utilizando np.linalg.inv da [6.81e-2, 3.63e-9; 3.63e-9, 2.27e-16], mientras que np.linalg.pinv da [9.48e-32, -1.77e-24; -1.77e-24, 3.33e-17].

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con el número de condición de las matrices. El número de condición mide la sensibilidad de la solución a los cambios en la entrada. Los métodos Pinv tienden a ser más sensibles con las matrices mal condicionadas, mientras que el método inv las maneja mejor.

    En el ejemplo dado, la matriz A tiene un número de condición de alrededor de 7,2e+18, lo que es bastante alto. Esto significa que incluso pequeños cambios en la entrada pueden provocar grandes cambios en la salida. Los métodos Pinv pueden verse más afectados por esto que inv.

    Una solución potencial sería regularizar la matriz antes de la inversión. Esto se puede hacer agregando una pequeña constante a la diagonal o usando un algoritmo de regularización como la regularización de Tikhonov. Otra solución sería usar un método más robusto para invertir matrices, como la pseudoinversa de Moore-Penrose (que es lo que pinv utiliza bajo el capó), pero con una tolerancia mayor para los valores singulares.

    En general, es importante tener en cuenta el número de condición de las matrices al trabajar con algoritmos numéricos y elegir el método adecuado según el problema en cuestión.

Comments are closed.