Ich muss die inverse Matrix berechnen und habe die solve
Funktion verwendet. Während es bei kleinen Matrizen gut funktioniert solve
, ist es bei großen Matrizen tendenziell sehr langsam. Ich habe mich gefragt, ob es eine andere Funktion oder Kombination von Funktionen gibt (über SVD, QR, LU oder andere Zerlegungsfunktionen), die mir schnellere Ergebnisse liefern können.
r
matrix-decomposition
matrix-inverse
jitendra
quelle
quelle
solve
Methode erledigt definitiv meine Arbeit, aber ich möchte, dass der Algorithmus schneller ist. Ich frage mich nur, ob es eine effizientere (im Zeitkontext) Funktion zur Berechnung der Inversen für eine derart große Matrix gibt.solve
? Ohne spezielle Struktur kann man sich natürlich den theoretischen Komplexitätsgrenzen der allgemeinen Matrixinversion nicht entziehen.Antworten:
Haben Sie versucht, was Kardinal vorgeschlagen hat, und einige der alternativen Methoden zur Berechnung der Inversen untersucht? Betrachten wir ein konkretes Beispiel:
Dies ist also ein Beispiel für eine Korrelationsmatrix, für die wir die Inverse wollen. Auf meinem Laptop (Core-i5 2.50Ghz) dauert es 8-9 Sekunden, etwas mehr als 4 Sekunden und 17-18 Sekunden (mehrere Code-Läufe werden empfohlen, um stabile Ergebnisse zu erzielen ).2000 × 2000
solve
chol2inv(chol())
qr.solve()
Die Inverse über die Choleski-Zerlegung ist also etwa doppelt so schnell wie
solve
. Möglicherweise gibt es dafür sogar noch schnellere Möglichkeiten. Ich habe gerade einige der offensichtlichsten hier untersucht. Und wenn die Matrix, wie bereits in den Kommentaren erwähnt, eine spezielle Struktur hat, kann dies wahrscheinlich für mehr Geschwindigkeit ausgenutzt werden.quelle
solve
:-)