¿Cuál es el algoritmo más rápido para calcular la matriz inversa y su determinante para matrices simétricas definidas positivas?

10

Dada una matriz simétrica definida positiva, ¿cuál es el algoritmo más rápido para calcular la matriz inversa y su determinante? Para los problemas que me interesan, la dimensión de la matriz es de 30 o menos.

  1. La alta precisión y velocidad es realmente necesaria. (se realizan millones de matrices)
  2. El determinante es necesario. En cada cálculo, solo se requiere un elemento de la matriz universal. ¡Gracias!
Pedidos
fuente
¿Tienes que invertir millones de esas matrices? De lo contrario, la velocidad no debería ser un problema.
Wolfgang Bangerth
Edité su título y pregunta para mayor claridad. Si cometí algún error, avíseme.
Geoff Oxberry
@Wolfgang Bangerth Sí, se debe considerar la velocidad.
Pedidos del
1
¿Sabes qué elemento de la matriz inversa se necesita? ¿O puede ser una entrada aleatoria?
Memming
2
@Orders Su comentario y edición parecen contradictorios: ¿necesita un elemento de la inversa o todos ellos?
Federico Poloni

Respuestas:

12

Para los problemas que me interesan, la dimensión de la matriz es de 30 o menos.

Como señala WolfgangBangerth, a menos que tenga una gran cantidad de estas matrices (millones, miles de millones), el rendimiento de la inversión matricial generalmente no es un problema.

Dada una matriz simétrica definida positiva, ¿cuál es el algoritmo más rápido para calcular la matriz inversa y su determinante?

Si la velocidad es un problema, debe responder las siguientes preguntas:

  • ¿Realmente necesitas todo el inverso? (Muchas aplicaciones no necesitan formar un inverso explícito).
  • ¿Realmente necesitas el determinante? (Los determinantes son poco comunes, pero ciertamente no son desconocidos en la ciencia computacional).
  • ¿Necesita alguno de ellos con alta precisión? (Los algoritmos de baja precisión tienden a ser más rápidos).
  • ¿Sería suficiente una aproximación probabilística? (Los algoritmos probabilísticos tienden a ser más rápidos).

La respuesta estándar a su problema de invertir una matriz definida pequeña y positiva y calcular su determinante sería la descomposición de Cholesky. Si , entonces , y . det ( A ) = n i = 1 l 2 i i det ( A - 1 ) = n i = 1 l - 2 i iA=LLTdet(UNA)=yo=1nortelyoyo2det(UNA-1)=yo=1nortelyoyo-2

Suponiendo que es por , la descomposición de Cholesky se puede calcular en aproximadamente flops, que es aproximadamente la mitad del costo de una descomposición de LU. Sin embargo, dicho algoritmo no se consideraría "rápido". Una descomposición aleatoria de LUn n n 3 / 3UNAnortenortenorte3/ /3podría ser un algoritmo más rápido que vale la pena considerar si (1) realmente tiene que factorizar un gran número de matrices, (2) la factorización es realmente el paso limitante en su aplicación, y (3) cualquier error incurrido al usar un algoritmo aleatorio es aceptable. Es probable que sus matrices sean demasiado pequeñas para que los algoritmos dispersos valgan la pena, por lo que las únicas otras oportunidades para algoritmos más rápidos requerirían una estructura matricial adicional (por ejemplo, en bandas) o explotar la estructura del problema (por ejemplo, tal vez pueda reestructurar su algoritmo de manera inteligente para que no ya no es necesario calcular una matriz inversa o su determinante). Los algoritmos determinantes eficientes son aproximadamente el costo de resolver un sistema lineal, dentro de un factor constante, por lo que los mismos argumentos utilizados para sistemas lineales se aplican también al cálculo de determinantes.

Geoff Oxberry
fuente
Sólo una breve nota: si , para calcular un único elemento se debe calcular sólo el ésima columna de . Una vez que se calcula la factorización de Cholesky, esto se realiza mediante sustitución hacia adelante y hacia atrás con respecto a un vector rhs de todos los ceros y con solo uno en la fila . Dado que el cálculo puede interrumpirse tan pronto como se haya calculado , el mejor caso es para peor de los casos para en el que uno tiene que calcular el retorno completo y sustituciones hacia adelante. B=A1bijjBjbijsinortenorte=lnortenorte-2si11
Stefano M
@StefanoM Aún mejor, puede permutar su matriz antes del comienzo del cálculo para que siempre esté en el mejor de los casos.
Federico Poloni