Ich werde versuchen, meine Gedanken über die erste Frage bezüglich der schnellen Umkehrung zu machen3×3 . Erwägen
A=⎡⎣⎢abcdefghi⎤⎦⎥
Da die Matrizen klein und sehr allgemein sind (keine bekannte Struktur, Nullen, relative Skalen der Elemente aufweisen), denke ich, dass es unmöglich wäre, einen Algorithmus für eine beliebige Skala (ohne ) invers zu geben ist schneller als 18 fusionierten Flops, wie jeder von 9 Elementen 2 fusionierten Flops erfordert, und alle Produkte sind einzigartig, nicht vor Details bereitgestellt ‚s Einträge .
Hier bezeichnet das Adjugat (Transponierung von Cofaktoren), das im Wesentlichen ein ist invers mit "beliebiger Skala" (vorausgesetzt, die Inverse existiert).1/det(A)Aa,…,i
A−1det(A)=adj(A)=⎡⎣⎢ei−fhbi−chce−bfdi−fgai−cgaf−cdge−dhah−bgae−bd⎤⎦⎥
adj(A)
Einige Berechnungen können jedoch zur Berechnung von wiederverwendet werden . Wenn ich es über die erste Spalte erweitere (es gibt 5 weitere Auswahlmöglichkeiten):
Beachten Sie, dass (* ) wurde bereits während der Auswertung von berechnet . Der Kehrwert der Determinante kann also in 4 zusätzlichen fusionierten Flops berechnet werden (wenn Kehrwert als 1 Flop betrachtet wird).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)
Nun sollten alle 9 Elemente des durch den bereits erhaltenen Kehrwert der Determinante skaliert werden, wobei weitere 9 fusionierte Flops hinzugefügt werden.adj(A)
So,
- Berechne in 18 fusionierten Flopsadj(A)
- Berechnen Sie in 3 fusionierten Flops mit Einträgen von bereits berechnetemdet(A)adj(A)
- Finden Sie (unter der Annahme von 1 Flop).1det(A)
- Skalieren Sie jedes Element von bereits berechnetem mit in weiteren 9 fusionierten Flops.adj(A)1det(A)
Das Ergebnis sind 18 + 3 + 1 + 9 = 31 fusionierte Flops . Sie haben Ihre Art der Berechnung der Determinante nicht beschrieben, aber ich denke, 1 zusätzlicher Flop kann gespeichert werden. Oder es kann verwendet werden, um die Prüfung in Schritt 3 durchzuführen , wobei die Toleranz für einen entarteten (nicht invertierbaren) Fall ist, was zu 32 fusionierten Flops führt (vorausgesetzt, es ist 1 Flop).|det(A)|>ϵϵif
Ich glaube nicht, dass es einen schnelleren Weg gibt, die Umkehrung einer allgemeinen Matrix zu berechnen, da alle verbleibenden Berechnungen eindeutig sind. Die Verwendung von Cayley-Hamilton sollte aus Geschwindigkeitssicht nicht hilfreich sein, da im Allgemeinen neben einigen anderen Operationen die Berechnung von für eine Matrix erforderlich ist.3×3A23×3
NB:
- Diese Antwort befasst sich nicht mit der numerischen Stabilität
- Das mögliche Potenzial zur Vektorisierung und Optimierung des Speicherzugriffsmusters wird ebenfalls nicht erörtert