El inverso, y el inverso de la matriz


10

Necesito calcular muchas inversas de matriz (para la descomposición polar de iteración de Newton), con un número muy pequeño de casos degenerados ( ).< 0.1 %3×3<0.1%

El inverso explícito (a través de matrices menores divididas por determinante) parece funcionar, y es de aproximadamente 32 ~ 40 flops fusionados (dependiendo de cómo calculo recíproco del determinante). Sin considerar el factor de escala det, son solo 18 flops fusionados (cada uno de los 9 elementos tiene la forma ab-cd, 2 flops fusionados).

Pregunta:

  • ¿Hay alguna manera de calcular el inverso de usando menos de 18 (con escala arbitraria) o 32 (con la escala adecuada, considerando recíproco 1 op) flops fusionados?3×3
  • ¿Hay alguna forma económica (usando ~ 50 f-flops) para calcular un inverso izquierdo estable hacia atrás de una matriz ?3×3

Estoy usando flotadores de precisión simple (juego para iOS). La estabilidad hacia atrás es un nuevo concepto interesante para mí y quiero experimentar. Aquí está el artículo que provocó el pensamiento.


¿Qué pasa con el uso del teorema de Cayley-Hamilton para el inverso?
nicoguaro

1
Si este es un cuello de botella para usted, ¿podría otro algoritmo de descomposición polar ser más rápido en este caso? ¿A través de SVD, por ejemplo? ¿O acelerar el método de Newton como en 3.3 de eprints.ma.man.ac.uk/694/01/covered/MIMS_ep2007_9.pdf ?
Kirill

Respuestas:


5

Intentaré reflexionar sobre la primera pregunta sobre el inverso rápido de 3×3 . Considerar

UNA=[unaresolsimihCFyo]

Dado que las matrices son pequeñas y muy generales (no presentan ninguna estructura conocida, ceros, escalas relativas de los elementos), creo que sería imposible dar un algoritmo de escala arbitraria (sin ) inverso que sea más rápido que el 18 fracasos fusionados, ya que cada uno de los 9 elementos requiere 2 fracasos fusionados, y todos los productos son únicos, siempre hay información previa sobre a entradas 's una , ... , i . A - 1 det ( A ) = adj ( A ) = [ e i - f1/ /det(UNA)UNAuna,...,yo Aquí,adj(A)denota adyuvante (transposición de cofactores), que esencialmente es una inversa con "escala arbitraria" (siempre que exista la inversa).

UNA-1det(UNA)=adj(UNA)=[miyo-Fhreyo-Fsolsolmi-rehsiyo-Chunayo-Csolunah-sisolCmi-siFunaF-Creunami-sire]
adj(UNA)

det(UNA)

det(UNA)=una(miyo-Fh)+si(Fsol-reyo)+C(reh-solmi)=una(miyo-Fh)-si(reyo-Fsol)-C(solmi-reh)
adj(UNA)1/ /det(UNA)

adj(UNA)

Entonces,

  1. adj(UNA)
  2. det(UNA)adj(UNA)
  3. 1det(UNA)
  4. adj(UNA)1det(UNA)

El |det(UNA)El |>ϵϵif

3×3UNA23×3

NÓTESE BIEN:

  • esta respuesta no trata la estabilidad numérica
  • tampoco se discute el posible potencial para la vectorización y la optimización del patrón de acceso a la memoria
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.