Wie ist der aktuelle Stand der Technik bei Algorithmen zur Singularwertzerlegung?

12

Ich arbeite an einer Nur-Header-Matrixbibliothek, um einen angemessenen Grad an linearer Algebra in einem möglichst einfachen Paket bereitzustellen, und ich versuche, einen Überblick über den aktuellen Stand der Technik zu erhalten: die SVD von a komplexe Matrix.

Ich mache eine zweiphasige Zerlegung, Bidiagonalisierung, gefolgt von einer Berechnung des Singularwerts. Im Moment verwende ich die Householder-Methode für die Bidiagonalisierung (ich glaube, LAPACK verwendet diese Methode auch), und ich denke, das ist ungefähr so ​​gut wie es derzeit ist (es sei denn, jemand kennt einen -Algorithmus dafür.) . Ö(N2)

Die Singularwertberechnung steht als nächstes auf meiner Liste, und ich bin ein wenig unschlüssig, was die üblichen Algorithmen dafür sind. Ich habe hier gelesen , dass die Forschung auf eine inverse Iterationsmethode zusteuerte, die Orthogonalität mit -Komplexität garantiert . Ich würde gerne davon oder von anderen Fortschritten erfahren.Ö(N)

gct
quelle
Gibt es ein Dokument für Ihre Nur-Header-Matrix-Bibliothek (außer der .h)? Füge auch den Tag "svd" hinzu.
Denis

Antworten:

7

"Randomisierte Algorithmen" sind in letzter Zeit für Teil-SVDS recht populär geworden. Eine Implementierung nur für Header kann hier heruntergeladen werden: http://code.google.com/p/redsvd/

Eine Übersicht über die aktuellen Methoden finden Sie hier: http://arxiv.org/abs/0909.4061

Für volle svds bin ich mir nicht sicher, ob du es besser kannst als Householder.

dranxo
quelle
Das hört sich sehr interessant an, ich muss mir das Umfragepapier ansehen, danke!
gct
OP interessiert sich für Algorithmen für dichte Matrizen. Ich denke nicht, dass randomisierte Algorithmen in dieser Situation wettbewerbsfähig sind, wenn sie überhaupt funktionieren.
Federico Poloni
Dieser Beitrag zeigte, dass randomisierte Methoden auf dichten Matrizen gut
funktionieren.
@dranxo In diesem Beitrag gibt es überhaupt keine Genauigkeitsvergleiche, und die Timing-Ergebnisse sehen nicht sehr genau aus. Randomisierte Algorithmen basieren auch auf der Projektion + exakten Lösung eines kleinen Problems. Dies bedeutet, dass OP ohnehin eine Implementierung einer "Standardmethode" für das resultierende kleine Problem benötigen würde.
Federico Poloni
Meinetwegen. Obwohl ich ein bisschen verwirrt bin, warum wir denken sollten, dass diese Methoden nur auf spärlichen Matrizen funktionieren. Die Zusammenfassung von Joel Tropps Artikel: "Randomisierte Algorithmen erfordern für eine dichte Eingangsmatrix O (mn log (k)) Gleitkommaoperationen (Flops) im Gegensatz zu O (mnk) für klassische Algorithmen." arxiv.org/pdf/0909.4061v2.pdf
dranxo
4

Ö(N)

(Ich wollte nur ein paar Kommentare machen, da ich nicht die Zeit habe, Details zu schreiben, aber es wurde ziemlich groß für das Kommentarfeld.)

LDLUDU

Der "Singularwert" -Abschnitt des Algorithmus stammt hingegen vom (verschobenen) Differentialquotientendifferenz-Algorithmus (dqd (s)) , der eine Zusammenfassung früherer Arbeiten von Fernando, Parlett , Demmel und Kahan (mit Inspiration) ist von Heinz Rutishauser).

Wie Sie vielleicht wissen, werden SVD-Methoden in der Regel zuerst mit einer bidiagonalen Zerlegung fortgesetzt, bevor die Singularwerte aus der bidiagonalen Matrix erhalten werden. Leider bin ich nicht über die derzeit beste Methode für die bidiagonale Front-End-Zerlegung informiert. Als letztes habe ich überprüft, dass die übliche Methode darin besteht, mit der QR-Zerlegung mit Säulendrehung zu beginnen und dann orthogonale Transformationen entsprechend auf den Dreiecksfaktor anzuwenden, um schließlich die bidiagonale Zerlegung zu erhalten.

Ich verstehe, dass ich mit den Details knapp war; Ich werde versuchen, diese Antwort weiter zu konkretisieren, sobald ich Zugang zu meiner Bibliothek habe ...

JM
quelle
Matrix zu Bidiagonale, mache eine Spalte und dann eine Reihe, wiederhole die Diagonale: benutze givens oder householder, um die Spalte auf die Diagonale zu nullen, dann mache dasselbe für die Reihe zur Superdiagonale.
Adam W
UEINVUU=ichVV=ich
Adam W
0

Es gibt die Bibliotheken PROPACK und nu-TRLan.

http://soi.stanford.edu/~rmunk/PROPACK/

http://crd-legacy.lbl.gov/~kewu/trlan/

Leistung
quelle
2
Hier fragt das Poster nach Algorithmen und nicht nach Bibliotheken. Könnten Sie stattdessen über die in diesen Bibliotheken verwendeten Algorithmen, ihre Komplexität bei der Berechnung und darüber sprechen, warum diese Bibliotheken auf dem neuesten Stand der Technik sind?
Geoff Oxberry