Je vais essayer de donner ma pensée sur la première question concernant l' inverse rapide de3×3 . Considérer
A=⎡⎣⎢abcdefghi⎤⎦⎥
É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
A−1det(A)=adj(A)=⎡⎣⎢ei−fhbi−chce−bfdi−fgai−cgaf−cdge−dhah−bgae−bd⎤⎦⎥
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(ei−fh)+b(fg−di)+c(dh−ge)=a(ei−fh)∗−b(di−fg)∗−c(ge−dh)∗
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,
- Calculer en 18 flops fusionnésadj(A)
- Calculez en 3 flops fusionnés en utilisant les entrées de déjà calculédet(A)adj(A)
- Trouvez (en supposant 1 flop).1det(A)
- 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é