Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Invertir una matriz usando CVXOPT

Estas en el tema de Invertir una matriz usando CVXOPT en el foro de Python en Foros del Web. Que tal, pues el tema en cuestión es simple, como invertir una matriz usando específicamente ese paquete de python. Puedo invertir una matriz usando el ...
  #1 (permalink)  
Antiguo 09/12/2013, 15:31
 
Fecha de Ingreso: diciembre-2013
Mensajes: 6
Antigüedad: 11 años
Puntos: 0
Pregunta Invertir una matriz usando CVXOPT

Que tal, pues el tema en cuestión es simple, como invertir una matriz usando específicamente ese paquete de python.
Puedo invertir una matriz usando el paquete numpy, sin embargo como uso matrices dispersas en mis códigos, mi asesor me dió la tarea de hacerlo usando CVXOPT.

El comando que se usa es:

Cita:
cvxopt.lapack.getri(A, ipiv)
Sin embargo se me pide como argumento la matriz a ser invertida (A) y un argumento llamado ipiv el cual es descrito como:
Cita:
The argument ipiv is an integer matrix of length at least min{m, n}. ///(El argumento ipiv es una matrix entera de longitud al menos min{m, n}.)
y como verán no tengo idea a que se refiere este último argumento.
Si alguien ha usado este paquete o conoce otra manera de invertir una matriz le agradecería me comente como hacerlo.

Saludos y gracias
Sergio Salazar
  #2 (permalink)  
Antiguo 09/12/2013, 17:12
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Invertir una matriz usando CVXOPT

Lee la documentación.

Cita:
cvxopt.lapack.getri(A, ipiv)
Computes the inverse of a matrix.

On entry, A and ipiv must contain the factorization as computed by gesv or getrf. On exit, A contains the matrix inverse.
Ejemplo con una matriz simple de 2x2
Código Python:
Ver original
  1. from cvxopt import matrix, normal
  2. from cvxopt.lapack import getrf, getri
  3.  
  4. n = 2
  5. #A = normal(n, n)
  6. A = matrix([4., 3., 3., 2.], (n,n))
  7. old = matrix(A)
  8. ipiv = matrix(0, (n,1))
  9. getrf(A, ipiv)
  10. getri(A, ipiv)
  11. print old
  12. print A
  13. print old * A

Lo que hace primero es factorizar, y eso lo pone en ipiv, después con A e ipiv sacas la inversa.
  #3 (permalink)  
Antiguo 09/12/2013, 18:19
 
Fecha de Ingreso: diciembre-2013
Mensajes: 6
Antigüedad: 11 años
Puntos: 0
Respuesta: Invertir una matriz usando CVXOPT

mmm ok ok, pero aún tengo la duda si ipiv significa algo en específico... es decir porque la necesidad imperiosa de pedirnos ese argumento...
De cualquier manera gracias...
  #4 (permalink)  
Antiguo 09/12/2013, 18:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Invertir una matriz usando CVXOPT

Si, ipiv son las matrices U y L (combinadas) resultado de la factorización LU.

Lo hacen porque necesitan esa matriz para obtener la matriz inversa de manera eficiente. De lo contrario seria muy lenta.
  #5 (permalink)  
Antiguo 09/12/2013, 18:59
 
Fecha de Ingreso: diciembre-2013
Mensajes: 6
Antigüedad: 11 años
Puntos: 0
Respuesta: Invertir una matriz usando CVXOPT

ahora todo tiene sentido...
ipiv la incializamos en cero para después de la factorización usar la matriz de permutación guardada en ipiv en las operaciones para el calculo de la inversa.

Muchas gracias!!

Etiquetas: inversa, matrices, matriz
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:54.