Numerische Behandlung des Eigenwertproblems Zusammenfassung Das Ziel dieses Vortrages ist, zwei gute Methoden für die numerische Bestimmung der Eigenwerte zu zeigen und wie man diese mit Matlab anwenden kann (implementieren). Namentlich wären das die Vektoriteration und die QR-Zerlegung. 0. Einleitung Wie wir bereits gesehen haben, benötigt man zum Lösen von den verschiedensten Problemen oft die Eigenwerte (EW) einer Matrix; sei es um die Hauptspannungen einer belasteten Probe auszurechnen oder eine Matrix in der Normalform zu schreiben. Deshalb möchte man die Eigenwerte möglichst gut und einfach berechnen können. In der Praxis geschieht dies natürlich numerisch mittels Computern. Mit der Methode des charakteristischen Polynoms, die wir ja meist anwenden, hat der Computer seine Mühen, besonders wenn die Eigenwerte sehr nahe beieinander liegen. In diesem Fall können unverhältnismässig grosse Fehler entstehen, was gelinde gesagt, nicht wünschenswert ist. Ein Auszug vom Buch Lineare Algebra von K. Nipp auf der Seite 25 soll diese Problematik verdeutlichen: P ( λ) = ( λ.4)( λ 3 2)( λ 2) 3 2 = λ + 4.842λ 7.6083λ + 3.9598 Das Polynom mit 5-stelliger Numerik ausgerechnet, ist mit 3-stelligen Fehlern behaftet. * 3 = [ λ λ ].6*0 * 3 = [ λ3 λ3 ].3*0 Wobei das die exakten Eigenwerte sind λ =.4 λ = 2 λ 2 2 = [ λ λ ].6*0 * 2 3 5 2 3 = Zusammenfassend kann man sagen, dass die Methode des charakteristischen Polynoms folgende Nachteile besitzt: - Bei Polynomen höheren Grades ist die Bestimmung der Nullstellen schwer und fehleranfällig - imaginäre Lösungen können auftreten - relativ grosse Fehler bei nah zusammenliegenden EWs - (es werden alle EW ausgerechnet) Es sind also andere Methoden von Nöten, um die EW zu bestimmen. 2 Samuele Laffranchini, Maya Matthias
. Vektoriteration.. Vektoriteration für symmetrische Matrizen Die Vektoriteration ist ein Verfahren zur Berechung von Eigenvektoren und Eigenwerten. Es wird dabei jeweils nur der betragsmässig kleinste Eigenwert berechnet, in der Praxis reicht das aber oft aus. Wir betrachten hier nur die Vektoriteration für symmetrische Matrizen, am Beispiel einer 2x2 Matrix A. Für eine solche Matrix A gilt: Alle Eigenwerte sind reell Es existiert eine orthonormale Eigenbasis zu A Aufgrund dieser Voraussetzungen lässt sich ein beliebiger 2x Vektor x a als Linearkombination der beiden normierten Eigenvektoren x () und x (2) der Matrix A schreiben: x a = c a x () + c 2 a x (2) Es gelten ausserdem folgende Identitäten: A x () = λ x () A x (2) = λ 2 x (2) (Definition des Eigenwerts) A x a = A c a x () + A c 2 a x (2) = λ c a x () + λ 2 c 2 a x (2)..2 erste Iteration Wir definieren nun eine Folge von Vektoren x 0, x, x 2,, x k. Der obere Index ohne Klammer bezeichnet den jeweiligen Iterationsschritt. x 0 ist ein zufällig gewählter Startvektor. Es soll nun gelten: A x = x 0 A x 2 = x A x 3 = x 2 Usw. Dies ist unsere Iterationsvorschrift. Für die Iteration muss in jedem Schritt eine Gleichung A x k = x k- mit Hilfe einer LR-Zerlegung gelöst werden, dies führt am Ende zu einem Vektor x k...3 Eigenschaften dieser Iteration Unter Anwendung obiger Identitäten lässt sich die Gleichung schreiben als: λ c x () + λ 2 c 2 x (2) = c 0 x () + c 2 0 x (2) (λ c - c 0 ) x () + (λ 2 c 2 c 2 0 ) x (2) = 0 Da x () und x (2) die Eigenbasis von A bilden, sind sie linear unabhängig und die obige Gleichung wird nur Null, wenn die Koeffizienten gleich Null sind: (λ c - c 0 ) = 0 (λ 2 c 2 - c 2 0 ) = 0 c = (/ λ ) c 0 c 2 = (/ λ 2 ) c 2 0 Samuele Laffranchini, Maya Matthias 2
Der Iterationsvorschrift zufolge lässt sich der Vektor: x = c x () + c 2 x (2) also schreiben als: x = (/ λ ) c 0 x () + (/ λ 2 ) c 2 0 x (2) In einem 2. Iterationsschritt können wir x 2 bestimmen: A x 2 = x λ c 2 x () + λ 2 c 2 2 x (2) = c x () + c 2 x (2) Mit der gleichen Rechung wie oben lassen sich wieder c 2 und c 2 2 durch c und c 2 ausdrücken: c 2 = (/ λ ) c c 2 2 = (/ λ 2 ) c 2 c 2 = (/ λ ) 2 c 0 c 2 2 = (/ λ 2 ) 2 c 2 0 Daraus folgt für den Vektor x 2 : x 2 = (/ λ ) 2 c 0 x () + (/ λ 2 ) 2 c 2 0 x (2) = (/ λ ) 2 (c 0 x () + (λ / λ 2 ) 2 c 2 0 x (2) ) Für k Iterationsschritte gilt: x k = (/ λ ) k (c 0 x () + (λ / λ 2 ) k c 2 0 x (2) ) Wir definieren nun λ als den betragsmässig kleinsten Eigenvektor der Matrix A. Dann konvergiert der zweite Term der Summe für k gegen Null, da (λ / λ 2 ) <. Es gilt dann: x k = (/ λ ) k c 0 x () = d x () d ist dabei nur ein Skalar, d.h. die Iteration führt zu einem x k, welches gegen einen Vektor in Richtung des Eigenvektors konvergiert...4 zweite Iteration Mit diesem Wissen modifizieren wir die Iterationsvorschrift so, dass wir jeden iterierten Vektor normieren. Dies spielt vor allem für die spätere Berechnung von λ eine Rolle. Wir starten mit einem normierten x 0 : A x = x 0 A x 2 = (x / x ) A x 3 = (x 2 / x 2 ) usw. Für k gilt dann: (x k / x k )= x () Somit kann man mit dieser Iteration den Eigenvektor zum kleinsten Eigenwert der Matrix A berechnen. Die Iteration wird solange durchgeführt bis die Vektoren (x k / x k ) und (x k- / x k- ) bis zur gewünschten Genauigkeit übereinstimmen. Samuele Laffranchini, Maya Matthias 3
Für die Berechnung des Eigenwertes λ zu diesem Eigenvektor, betrachten wir die folgende Gleichung: Für k gross genug gilt: (x k / x k )= x () A(x k / x k )= Ax () (Ax k )/ x k = λ x () (x k- / x k- )/ x k = λ x () ((x k- / x k- )/ x k ) = λ x () / x k = λ (Da x () und (x k- / x k- ) die Norm besitzen) Somit kann man durch die Vektoriteration bis zum k-ten Schritt den kleinsten Eigenwert und den dazugehörigen Eigenvektor berechnen..2 Die Implementierung der Vektoriteration in Matlab.2. Vorgehensweise Um ein Algorithmus erfolgreich zu implementieren, ist es sicher sinnvoll die einzelnen Schritte des Verfahrens in der logischen Reihenfolge zu skizzieren: Zur Erinnerung: Gegeben ist: Gesucht ist: A sei eine beliebige, symmetrische ( A = A T ) Matrix vom Rang r und x 0 sei ein beliebiger Spaltenvektor ( r x ), jedoch kein EV von A Betragsmässig kleinster EW von A Input: Dimension Toleranz Matrix x 0 normieren Gleichungssystem Ax = x 0 nach x lösen Nein x normieren Output: kl. Eigenwert Eigenvektor Ja x mit x 0 vergleichen Genügend genau? Samuele Laffranchini, Maya Matthias 4
.2.2 Das Programm Das Schema aus.2. in die Sprache von Matlab übersetzt wäre dann: % Vektoriteration Titel d = 3 legt die Dimension fest A = randn(d,d); erstellt eine dxd Matrix, hier 3x3 A = A'*A; macht sie symmetrisch A = round(0*a) rundet Werte (zwischen 0 und 0) x0 = randn(d,); erstellt zufälliger Spaltenvektor x0 = round(x0) rundet den Spaltenvektor x0 = x0/norm(x0); x0 wird durch seine Norm ersetzt (Normierung) for i=:00 Begin der Schleife (*) x = A\x0; neuer Vektor x n = norm(x); x = x/n; normiert den Vektor x if (abs(x-x0)<.e-5) Abbruchsbedingung, Toleranz break; else x0 = x; Definiert x als neues x0 end (es geht zurück zu (*)) end fprintf('anzahl von Schritten %i\n',i) fprintf('eigenwert ist %f\n',/n) x Ausgabe der benötigten Schritte zeigt den EW zeigt den EV [V D] = eig(a); Kontrollrechnung D(,) zeigt den EW V(:,) zeigt den EV Es muss nicht jeder einzelne Tag (Code) verstanden werden, sondern die Vorgehensweise ist entscheidend. Zeichenerklärung: % kommentiert eine Zeile aus (deaktiviert) ; Unterdrückt die Anzeige dieser Zeile im Output fprintf(' ') Textfeld for Erstellt i Schleifen (i geht von bis 00) break Stoppt die for-schleife if else Wenn (if) die Bedingung erfüllt ist, dann mache dies, sonst (else) mach das. randn Erzeugt eine Zufallszahl norm() Normiert einen Vektor round() Rundet Zahlen [V D] = eig(a) Erstellt eine Matrix V bestehend aus den EV und einer Diagonalmatrix D mit den EW. Hier wurde eine Zufallsmatrix der Dimension d erstellt. Man kann auch eine selbstgewählte (symmetrische) Matrix verwenden. Beispielsweise: A =[ 2 ; 2 ] Die Toleranz oder die Mindestgenauigkeit wird bei if mit: (abs(x-x0)<.e-5) bestimmt. Das Programm läuft bis diese Genauigkeit erreicht wurde (oder i=00). Dass das Programm tatsächlich funktioniert, zeigt das Beispiel im Anhang 3. Samuele Laffranchini, Maya Matthias 5
.2.3 Vergleich: Methode des charakteristischen Polynoms und der Vektoriteration Wir kommen zurück zur Methode des charakteristischen Polynoms und möchten diese mit der Vektoriteration vergleichen. Dazu wurde auch die Methode des charakteristischen Polynoms in Matlab implementiert. (Der Quellcode befindet sich im Anhang 3.2) Da es schwer ist Rechenschritt an sich zu zählen, möchten wir die benötigte Zeit der beiden Algorithmen vergleichen. Die Zeit ist schlussendlich ja das entscheidende Effizienzkriterium. Dazu wurde die Zeit mit der Funktion tic toc vom Computer selbst gemessen. Natürlich mussten die beiden Algorithmen die gleiche Zufallsmatrix bearbeiten. Es wurden verschiedene d für die Dimension verwendet. Dabei hat sich herauskristallisiert, dass bei kleinen d beide Algorithmen praktisch gleich schnell sind, hingegen bei grösseren d, die Vektoriteration deutlich schneller ist. Jedoch muss man eingestehen, dass bei der Methode des charakteristischen Polynoms alle Eigenwerte ausgerechnet wurden..2.4 Gesamtbeurteilung der Vektoriteration Somit hat die Vektoriteration gegenüber der Methode des charakteristischen Polynoms folgende Vorteile: - Liefert beliebig genaue Resultate - Geringe Fehleranfälligkeit, keine komplexen Zahlen - Hohe Effizienz - Es wird nur das berechnet, was man wirklich braucht. Eine Schwachstelle des Algorithmus ist, wenn der zufällige Vektor gerade ein Eigenvektor der Matrix ist. Dies ist aber unwahrscheinlich und deshalb nicht weiter störend. Da es aber auch vielfach Fälle gibt, wo man alle Eigenvektoren und alle Eigenwerte einer Matrix ausrechnen will, braucht man noch einen zweiten Algorithmus. 2. QR Algorithmus 2. Ziel QR-Algorithmus: Finden alle Eigenwerte und Eigenvektoren ( auch Komplexe) einer allgemeinen reellen n x n- Matrix. 2..2 Vorwissen aus QR-Zerlegung: Zu jeder m x n-matrix A, mit m > n, existiert eine orthogonale m x m-matrix Q, so dass gilt: A = QR mit R = ( R 0 / 0) Wobei R 0 eine n x n-rechtsdreiecksmatrix ist und 0 die (m-n) x n-nullmatrix. Samuele Laffranchini, Maya Matthias 6
2..3 Theorie: Zwei quadratischen Matrizen A und B werden ähnlich genannt, falls es eine reguläre n x n- Matrix T gibt, so dass: B = T - AT In diesen Fall, haben A und B die gleiche Eigenwerte, nämlich, wenn λ Eigenwerte von A ist, und wenn x seine Eigenvektor ist, es gilt: BT - x = T - Ax = λ T - x Beweis: Ist λ Eigenwert von A und x seine Eigenvektor, es gilt Ax = λx Wir müssen beweisen, dass es gilt: B x 2 = λx 2 x x 2 Wir wissen auch dass es gilt: B = T - AT Wir können probieren, diese Gleichung zu benutzen, aber es folgt: T-AT x = λ x!!!!! Diese ist falsch!!! Das T zwischen A und x muss verschwinden! Um diese T zu eliminieren, können wir B multiplizieren nach T -. B T - = T - AT T - = T - AI = T - A Jetzt können wir T - A benutzen: T - Ax = λ T - x = BT - x Wir sehen, dass die Eigenwert von A und B ist gleich, aber die Eigenvektoren sind verschiedene: Eigenvektor von A = x= x Eigenvektor von B = T - x = x 2 Also λ ist auch Eigenwerte von B und seine Eigenvektor ist T - x. Die Methoden, die sie gleichzeitig alle Eigenwerte von einer Matrix zu aproximieren erlauben, sind generell auf die Idee begründet sich die Anfangsmatrix in eine ähnliche Dreiecksmatrix zu verwandeln. Davon entsteht, dass die Eigenwerte von die Diagonalelement dargestellt werden. Die QR-Algorithmus ist das mehr benutzte Methode, um die Eigenwerte zu berechnen, auch, weil das wirksamste ist. Samuele Laffranchini, Maya Matthias 7
2..4 QR-Algorithmus: Zerlege: A = Q R Bilde A 2 = R Q [ = Q T AQ ] Dieser zwei Schritte sind die Basis des QR-Algorithmus, findet einmal A, es muss dem gleichen Verfahren folgen, um A 3 A 4, A n zu finden. Je höher n wird, desto genauer sind die gefundene Eigenwerte. In allgemein für das QR-Algorithmus gilt: A k = Q k R k und A k+ = R k Q k Von diese zwei Beziehungen folgt, dass: R k = Q k - A k A k+ = Q k - A k Q k =Q k T A k Q k Also die Matrizen der Folge {A k } sind alle ähnliche, und also haben die gleiche Eigenvektor. Die Matrix A k für k konvergiert zu eine Dreiecksmatrix. 2..5 Die Eigenvektoren: Um die Eigenvektor x (j) der Matrix A zu finden, muss man die folgende Gleichung zu lösen: x (j) = Q y (j) Wobei y (j) ist die Eigenvektor der Matrix A k (und es ist einfach zu berechnen!) und Q = Q *Q 2 *..*Q k ist die Produkt aller orthogonale Matrizen Q i, die wir benutzen haben, um das QR-Algorithmus zu führen. 2..6 Einfach Beispiel: (mit MATLAB durchgeführt) Bestimmen alle Eigenwerte dieser Matrix mit das QR-Algorithmus: A = [ 3 4 ; 4 ] Zerlegung von A : A = Q R = [ -0.6000-0.8000 ; -0.8000-0.6000] * [ -5.0000-3.2000 ; 0-2.6000] Bildung von A 2 : A 2 = R Q = [5.5600 2.0800 ; 2.0800 -.5600] Zerlegung von A 2 : A 2 = Q 2 R 2 =[-0.9366-0.3504 ; -0.3504 0.9366] * [-5.9363 -.405 ; 0-2.899] Samuele Laffranchini, Maya Matthias 8
Bildung von A 3 : A 3 =R 2 Q 2 = [6.05 0.7673 ; 0.7673-2.05] Zerlegung von A 3 : A 3 =Q 3 R 3 = [-0.992-0.258 ; -0.258 0.992] *[-6.0996-0.5032 ; 0-2.33] Bildung von A 4 : A 4 = R 3 Q 3 = [6.44 0.268 ; 0.268-2.44].. Bildung von A 7 : A 7 = R 6 Q 6 = [6.23 0.02 ; 0.02-2.23] Jetzt können wir stoppen, weil wir eine hinlänglich Genauigkeit erreichen haben. Die gefundene Eigenwerte sind deshalb 6.23 und -2.23. Wenn wir mit der Methode der Determinante die Eigenwerte berechnen, erhalten wir die gleiche Resultat. Berechnen nun die Eigenvektoren: Q = [0.789-0.643 ; 0.9295-0.3688] y () = [ 0.004 ; -] y (2) = [ - ; -0.004] Benutzen wir jetzt die Formel x (j) = Q y (j) : x () = [ 0.654 ; 0.370] x (2) = [ -0.7882 ; -0.9290] Samuele Laffranchini, Maya Matthias 9
2.2 Beispiele zum QR-Algorithmus [mit Matlab] 2.2. Einfache 2x2-Matrix A = [ 2;2 ] A = 2 2 Kontrolle eig(a) ans = - 3 Eigenwerte: - und 3 Samuele Laffranchini, Maya Matthias 0
2.2.. Schrittweise Berechnung [Q R] = qr(a) Q = -0.4472-0.8944-0.8944 0.4472 R = -2.236 -.7889 0 -.346 A= Q*R A =.0000 2.0000 2.0000.0000 A= R*Q A = 2.6000.2000.2000-0.6000 A3=R2*Q2 A3 = 2.9945 0.479 0.479-0.9945 [Q R]= qr(a) Q = -0.9080-0.49-0.49 0.9080 R = -2.8636-0.838 0 -.0476 [Q3 R3]= qr(a3) Q3 = -0.9988-0.0493-0.0493 0.9988 R3 = -2.9982-0.0987 0 -.0006 A2= R*Q A2 = 2.952 0.4390 0.4390-0.952 [Q2 R2]=qr(A2) A4=R3*Q3 A4 = 2.9994 0.0494 0.0494-0.9994 usw. Q2 = -0.989-0.47-0.47 0.989 R2 = -2.9837-0.2943 0 -.0055 Samuele Laffranchini, Maya Matthias
2.2..2 Direkte Berechnung mit Matlab A = [ 2;2 ] Matrix A = 2 2 Genauigkeit oder Toleranz tol=.e-5; Maximaler Lauf maxn=00; Titel fprintf('qr Algorithmus\n') QR Algorithmus for i=:maxn [Q R] = qr(a); A= Q'*A*Q; Abbruchbedingung if (abs(a(2,))<tol) Eigenwerte von A ev= diag(a); break end end i = 2 ev = 3.0000 -.0000 Samuele Laffranchini, Maya Matthias 2
2.2.2 Beliebige 5x5 Matrix tol=.e-5; maxn=700; Beliebige 5x5-Matrix B= randn(5,5); Symmetrische Matrix B=B'*B Matrix B = 4.8707 0.302-2.5578 0.3060-2.2967 0.302.5799 -.200-0.950-0.0056-2.5578 -.200 4.9952 0.648-0.4092 0.3060-0.950 0.648 2.305-0.9062-2.2967-0.0056-0.4092-0.9062 2.795 Titel fprintf('qr Algorithmus\n') QR Algorithmus for i=:maxn [Q R]=qr(B); B=Q'*B*Q; if (abs(b(2,))<tol) Samuele Laffranchini, Maya Matthias 3
Eigenwerte von B ev=diag(b); break end end i = 26 ev = 8.0322 5.0220.996.0449 0.2808 Kontrolle eig(b) ans = 8.0322 5.0220.996.0449 0.2808 Samuele Laffranchini, Maya Matthias 4
3. Anhang 3. Matlab Ausgabe einer Vektoriteration Ein Beispiel einer Vektoriteration mit Matlab d = 4 A = 80-5 -52-5 -5 9-4 3-52 -4 66 36-5 3 36 50 x0 = 0 - - x = -0.389 0.859 0.259-0.58 x = -0.264 0.870 0.232-0.529 x = -0.259 0.87 0.236-0.526 x = -0.259 0.872 0.236-0.526 x = -0.259 0.872 0.236-0.526 Gewählte Dimension Zufällige symmetrische Matrix Zufälliger Startvektor Erste Iteration Zweite Iteration Dritte Iteration Vierte Iteration Fünfte Iteration Anzahl von Schritten 5 Eigenwert ist 0.48955 x = -0.259 0.872 0.236-0.526 Eigenwert (Lösung) Eigenvektor (Lösung) Samuele Laffranchini, Maya Matthias 5
3.2 Programm: Algorithmen-Vergleich Dieses Programm vergleicht die Laufdauer der beiden Methoden. % Parameter festlegen tol =.e-6; maxn = 00; d = 4; % Matrix wird erstellt A = randn(d,d); A = A'*A; A = round(0*a) % Toleranz % Maximale Anzahl Schleifen % Dimension % Erstellt eine beliebige Matrix % Wird symmetrisch gemacht % Eigenwerte ausrechnen % Kontrollrechnung fprintf('genaue Eigenwerte\n') [EV EW] = eig(a); ev = diag(ew) % Gibt die Ews aus % Errechnet die EW mit dem charakteristischem Polynom fprintf('löst mit der Methode des charakteristischen Polynoms\n') tic % Startet Zeitmessung syms lambda p = det(a-lambda*eye(d)); % Das charakteristische Polynom ev = solve(p); % Findet Nullstellen ev = eval(ev) % Gibt die Ews aus toc % Stoppt Zeitmessung % Vektoriteration fprintf('löst mit der Methode der Vektoriteration\n') tic y0 = randn(d,); y0 = y0/norm(y0); for i=:maxn y = A\y0; n = norm(y); y = y/n; if (abs(y-y0)< tol) ev = /n; break; else y0 = y; end end ev toc % Startet Zeitmessung % Zufälliger Startvektor % Normiert % Nächster Vektor % Normiert % Prüft das Stoppkriterium % Stoppt % Neue Itineration % Gibt den EW aus % Stoppt Zeitmessung return Samuele Laffranchini, Maya Matthias 6