Ich muss viele Matrix-Inversen (für die polare Newton-Iterationszerlegung) mit einer sehr geringen Anzahl entarteter Fälle ( ) berechnen .
Explizite Inverse (über Matrix-Minderjährige geteilt durch Determinante) scheinen zu funktionieren und sind ungefähr ~ 32 ~ 40 fusionierte Flops (abhängig davon, wie ich den Kehrwert der Determinante berechne). Ohne Berücksichtigung des Det-Skalierungsfaktors sind es nur 18 Fused Flops (jedes der 9 Elemente hat die Form ab-cd, 2 Fused Flops).
Frage:
- Gibt es eine Möglichkeit, die Inverse von mit weniger als 18 (mit beliebiger Skala) oder 32 (mit der richtigen Skala, unter Berücksichtigung von reziproken 1 op) fusionierten Flops zu berechnen ?
- Gibt es eine wirtschaftliche Möglichkeit (unter Verwendung von ~ 50 f-Flops), eine rückwärtsstabile linke Inverse einer Matrix zu berechnen?
Ich verwende Floats mit einfacher Genauigkeit (iOS-Spiel). Die Rückwärtsstabilität ist für mich ein interessantes neues Konzept und ich möchte experimentieren. Hier ist der Artikel , der den Gedanken provoziert hat.
matrix
matrix-equations
inverse
matrix-factorization
Sergiy Migdalskiy
quelle
quelle
Antworten:
Ich werde versuchen, meine Gedanken über die erste Frage bezüglich der schnellen Umkehrung zu machen3×3 . Erwägen
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) A a,…,i
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)
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,
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×3 A2 3×3
NB:
quelle