L' inverse de la matrice rapide et stable vers l'arrière (à gauche)

10

J'ai besoin de calculer beaucoup d' inverses matricielles (pour la décomposition polaire d'itération de Newton), avec un très petit nombre de cas dégénérés ( ).3×3<0.1%

L'inverse explicite (via les matrices mineures divisées par le déterminant) semble fonctionner, et est d'environ ~ 32 ~ 40 flops fusionnés (selon la façon dont je calcule la réciproque du déterminant). Sans tenir compte du facteur d'échelle det, ce ne sont que 18 flops fusionnés (chacun des 9 éléments est de la forme ab-cd, 2 flops fusionnés).

Question:

  • Existe-t-il un moyen de calculer l'inverse de utilisant moins de 18 (avec une échelle arbitraire) ou 32 (avec une échelle appropriée, en considérant la réciproque 1 op) flops fusionnés?3×3
  • Existe-t-il un moyen économique (en utilisant ~ 50 f-flops) pour calculer un inverse gauche stable vers l'arrière d'une matrice ?3×3

J'utilise des flotteurs simple précision (jeu iOS). La stabilité arrière est un nouveau concept intéressant pour moi et je veux expérimenter. Voici l'article qui a provoqué la réflexion.

Sergiy Migdalskiy
la source
Qu'en est-il de l'utilisation du théorème de Cayley-Hamilton pour l'inverse?
nicoguaro
1
Si c'est un tel goulot d'étranglement pour vous, un autre algorithme de décomposition polaire pourrait-il être plus rapide dans ce cas? Par SVD, par exemple? Ou accélérer la méthode de Newton comme dans 3.3 de eprints.ma.man.ac.uk/694/01/covered/MIMS_ep2007_9.pdf ?
Kirill

Réponses:

5

Je vais essayer de donner ma pensée sur la première question concernant l' inverse rapide de3×3 . Considérer

A=[adgbehcfi]

Étant donné que les matrices sont petites et très générales (ne présentent aucune structure connue, zéros, échelles relatives des éléments), je pense qu'il serait impossible de donner un algorithme d'échelle arbitraire (sans ) inverse est plus rapide que 18 flops fusionnés, comme chacun des 9 éléments nécessite 2 flops fusionnés, et tous les produits sont uniques, fourni aucune information préalable sur entrées d » . Ici, désigne l'adjugate (transposition des cofacteurs), qui est essentiellement un inverse avec "échelle arbitraire" (à condition que l'inverse existe).1/det(A)Aa,,i

A1det(A)=adj(A)=[eifhdifggedhbichaicgahbgcebfafcdaebd]
adj(A)

Cependant, certains calculs peuvent être réutilisés pour le calcul de . Si je le développe sur la première colonne (5 autres choix sont disponibles): Remarquez que (* ) a déjà été calculé lors de l'évaluation de . Ainsi, l'inverse du déterminant peut être calculé en 4 flops fusionnés supplémentaires (si réciproque est considéré comme 1 flop).det(A)

det(A)=a(eifh)+b(fgdi)+c(dhge)=a(eifh)b(difg)c(gedh)
adj(A)1/det(A)

Maintenant, chacun des 9 éléments du doit être mis à l'échelle par l'inverse déjà obtenu du déterminant, en ajoutant 9 autres flops fusionnés.adj(A)

Donc,

  1. Calculer en 18 flops fusionnésadj(A)
  2. Calculez en 3 flops fusionnés en utilisant les entrées de déjà calculédet(A)adj(A)
  3. Trouvez (en supposant 1 flop).1det(A)
  4. Mettez à l'échelle chaque élément de déjà calculé par dans 9 autres flops fusionnés.adj(A)1det(A)

Résultat: 18 + 3 + 1 + 9 = 31 flops fusionnés . Vous n'avez pas décrit votre façon de calculer le déterminant, mais je suppose qu'un flop supplémentaire peut être enregistré. Ou il peut être utilisé pour effectuer la vérification à l'étape 3, où est la tolérance pour le cas dégénéré (non inversible), résultant en 32 flops fusionnés (en supposant qu'il y ait 1 flop).|det(A)|>ϵϵif

Je ne pense pas qu'il existe un moyen plus rapide de calculer l'inverse d'une matrice générale car tous les calculs restants sont uniques. L'utilisation de Cayley-Hamilton ne devrait pas aider du point de vue de la vitesse, car en général, il faudra calculer pour une matrice plus de certaines autres opérations.3×3A23×3

NB:

  • cette réponse ne traite pas de la stabilité numérique
  • le potentiel possible de vectorisation et d'optimisation du modèle d'accès à la mémoire n'est pas non plus discuté
Anton Menshov
la source