Main Content

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Singuläre Werte

Ein singulärer Wert und entsprechende singuläre Vektoren einer Rechteckmatrix A sind ein Skalar σ bzw. ein Vektorpaar (u und v), die Folgendes erfüllen:

Av=σuAHu=σv,

wobei AH die hermitesche Transponierte von A ist. Die singulären Vektoren u und v werden typischerweise so skaliert, dass sie eine Norm von 1 aufweisen. Ebenfalls gilt, wenn u und v singuläre Vektoren von A sind, dann sind -u und -v auch singuläre Vektoren von A.

Die singulären Werte σ sind stets reell und nicht negativ, auch dann wenn A komplex ist. Mit den singulären Werten in einer Diagonalmatrix Σ und den entsprechenden singulären Vektoren, die die Spalten der beiden orthogonalen Matrizen U und V bilden, ergeben sich die folgenden Gleichungen:

AV=UΣAHU=VΣ.

Da U und V unitäre Matrizen sind, ergibt sich durch Multiplikation der ersten Gleichung mit VH auf der rechten Seite die Gleichung der Singulärwertzerlegung

A=UΣVH.

Die vollständige Singulärwertzerlegung einer m-mal-n-Matrix umfasst Folgendes:

  • m-mal-m-Matrix U

  • m-mal-n-Matrix Σ

  • n-mal-n-Matrix V

Anders ausgedrückt, U und V sind beide quadratisch und Σ hat dieselbe Größe wie A. Wenn A wesentlich mehr Zeilen als Spalten hat (m > n), ist die resultierende m-mal-m-Matrix U groß. Allerdings werden die meisten Spalten in U mit Nullen in Σ multipliziert. In dieser Situation spart die reduzierte Zerlegung Zeit und Speicherkapazität, indem sie eine m-mal-n-Matrix U, eine n-mal-n-Matrix Σ und dieselbe Matrix V erstellt:

In the economy-sized decomposition, columns in U can be ignored if they multiply zeros in the diagonal matrix of singular values.

Die Eigenwertzerlegung ist das richtige Tool für die Analyse einer Matrix, wenn sie eine Zuordnung von einem Vektorraum zu sich selbst darstellt wie für eine gewöhnliche Differenzialgleichung. Allerdings ist die Singulärwertzerlegung das richtige Tool für die Analyse einer Zuordnung von einem Vektorraum in einen anderen Vektorraum, möglicherweise mit einer anderen Dimension. Die meisten Systeme simultaner linearer Gleichungen fallen in diese zweite Kategorie.

Wenn die Matrix A quadratisch, symmetrisch und positiv definit ist, sind ihr Eigenwert und ihr Singulärwert identisch. Wenn jedoch A von der Symmetrie und positiven Definitheit abweicht, vergrößert sich die Differenz zwischen den beiden Zerlegungen. Insbesondere die Singulärwertzerlegung einer reellen Matrix ist immer reell, doch die Eigenwertzerlegung einer reellen, nicht symmetrischen Matrix kann komplex sein.

Für die Beispielmatrix

A = [9     4
     6     8
     2     7];

lautet die vollständige Singulärwertzerlegung wie folgt:

[U,S,V] = svd(A)

U =

   -0.6105    0.7174    0.3355
   -0.6646   -0.2336   -0.7098
   -0.4308   -0.6563    0.6194


S =

   14.9359         0
         0    5.1883
         0         0


V =

   -0.6925    0.7214
   -0.7214   -0.6925

Sie können verifizieren, dass U*S*V' gleich A innerhalb des Rundungsfehlers ist. Für dieses kleine Problem ist die reduzierte Zerlegung nur minimal kleiner.

[U,S,V] = svd(A,"econ")

U =

   -0.6105    0.7174
   -0.6646   -0.2336
   -0.4308   -0.6563


S =

   14.9359         0
         0    5.1883


V =

   -0.6925    0.7214
   -0.7214   -0.6925

Und auch hier ist U*S*V' gleich A innerhalb des Rundungsfehlers.

SWZ-Stapelberechnung

Wenn Sie eine große Sammlung von Matrizen mit derselben Größe zerlegen müssen, ist es ineffizient, alle Zerlegungen in einer Schleife mit svd durchzuführen. Stattdessen können Sie alle Matrizen in einem mehrdimensionalen Array verketten und mit pagesvd mit einem einzigen Funktionsaufruf Singulärwertzerlegungen auf allen Arrayseiten durchführen.

FunktionVerwendung
pagesvdFühren Sie mit pagesvd Singulärwertzerlegungen auf den Seiten eines mehrdimensionalen Arrays durch. Dies ist eine effiziente Methode zur Durchführung von SWZ an einer großen Sammlung von Matrizen, die alle dieselbe Größe haben.

Angenommen, es liegt eine Sammlung von drei 2x2-Matrizen vor. Verketten Sie die Matrizen mit der Funktion cat zu einem 2x2x3-Array.

A = [0 -1; 1 0];
B = [-1 0; 0 -1];
C = [0 1; -1 0];
X = cat(3,A,B,C);

Führen Sie nun mit pagesvd die drei Zerlegungen gleichzeitig durch.

[U,S,V] = pagesvd(X);

Für jede Seite von X gibt es entsprechende Seiten in den Ausgaben U, S und V. Zum Beispiel befindet sich die Matrix A auf der ersten Seite von X und ihre Zerlegung ist durch U(:,:,1)*S(:,:,1)*V(:,:,1)' gegeben.

SWZ-Niedrigrangapproximation

Bei großen, dünn besetzten Matrizen ist die Verwendung von svd zur Berechnung aller Singulärwerte und Singulärvektoren nicht immer praktikabel. Wenn Sie zum Beispiel nur einige der größten Singulärwerte kennen müssen, stellt die Berechnung aller Singulärwerte einer dünn besetzten 5000x5000-Matrix zusätzlichen Aufwand dar.

Wenn nur ein Teil der Singulärwerte und Singulärvektoren erforderlich ist, sind die Funktionen svds und svdsketch gegenüber svd zu bevorzugen.

FunktionVerwendung
svdsVerwenden Sie svds, um eine Approximation der SWZ mit dem Rang k zu berechnen. Sie können angeben, ob die Untermenge der Singulärwerte die größte oder die kleinste Zahl oder eine Zahl sein soll, die einer bestimmten Zahl am nächsten ist. svds berechnet in der Regel die bestmögliche Approximation mit dem Rang k.
svdsketchVerwenden Sie svdsketch, um eine teilweise SWZ der Eingabematrix zu berechnen, die innerhalb einer bestimmten Toleranz liegt. Während svds erfordert, dass Sie den Rang angeben, bestimmt svdsketch adaptiv den Rang der Matrixskizze basierend auf der angegebenen Toleranz. Die Approximation mit dem Rang k, die svdsketch schließlich verwendet, liegt innerhalb der Toleranz, doch im Gegensatz zu svds ist nicht garantiert, dass es sich um die bestmögliche Approximation handelt.

Angenommen, es liegt eine dünn besetzte 1000x1000-Zufallsmatrix mit einer Dichte von etwa 30 % vor.

n = 1000;
A = sprand(n,n,0.3);

Die sechs größten singulären Werte sind

S = svds(A)

S =

  130.2184
   16.4358
   16.4119
   16.3688
   16.3242
   16.2838

Und die sechs kleinsten singulären Werte sind

S = svds(A,6,"smallest")

S =

    0.0740
    0.0574
    0.0388
    0.0282
    0.0131
    0.0066

Für kleinere Matrizen, die vollständig im Speicher Platz finden, kann full(A), unter Verwendung von svd(full(A)), dennoch schneller sein als svds oder svdsketch. Wenn jedoch wirklich große und dünn besetzte Matrizen vorliegen, lässt sich die Verwendung von svds oder svdsketch nicht vermeiden.

Siehe auch

| | | |

Verwandte Themen