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 %
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?
- ¿Hay alguna forma económica (usando ~ 50 f-flops) para calcular un inverso izquierdo estable hacia atrás de una matriz ?
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.
matrix
matrix-equations
inverse
matrix-factorization
Sergiy Migdalskiy
fuente
fuente
Respuestas:
Intentaré reflexionar sobre la primera pregunta sobre el inverso rápido de3 × 3 . Considerar
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 ( A ) UNA a , ... , yo
Aquí,adj(A)denota adyuvante (transposición de cofactores), que esencialmente es una inversa con "escala arbitraria" (siempre que exista la inversa).
Entonces,
if
NÓTESE BIEN:
fuente