Einführung in die numerische Mathematik für Chemiker Prof. Dr. Bernd Hartke, [email protected] Henrik R. Larsson, [email protected] Aufgabenblatt 7: Matrixeigenwertproblem Abgabe: 20.01.2016, Beantwortung der Fragen bitte als pdf-Datei! Abgabe der Programme als .m-Dateien. 1 Implementierung Implementieren Sie die Diagonalisierung einer Matrix nach Jacobi. Beachten Sie dazu die Hinweise im Skript. Hinweise: • Es ist oftmals sinnvoll, die Eigenwerte- und Vektoren der Größe nach zu sortieren. 1 2 3 4 5 6 7 8 9 10 function [uv,ev] = sort_eigvals (uv,ev) % Sortiert die Eigenvektoren uv und Eigenwerte ev. %Konvertiert ev−Diagonalmatrix zu einem Vektor, sofern ev nicht schon ein Vektor ist . if size (ev ,1) == size (ev ,2) [ev, idx] = sort ( diag (ev) ) ; else [ev, idx] = sort (ev) ; end uv = uv (:, idx ) ; end • Zum Testen bieten sich Zufallsmatrizen an. Symmetrische Zufallsmatrizen der Größe N erhalten Sie durch A = rand(N,N); A = A + A '; 1 6 Punkte 2 Tests I Testen Sie Ihre Routine, in dem sie symmetrische Zufallsmatrizen der Größe 2 bis 35 diagonalisieren. Vergleichen Sie mit der Octave-Routine eig. Tragen Sie folgendes graphisch auf: 1. Zahl der benötigten Sweeps gegen die Matrixgröße. 2. Kubikwurzel der benötigten Zeit der Diagonalisierung (sowohl eig als auch Ihre Routine). ΛU0 k1 (sowohl eig als auch Ihre Routine). 3. Fehler der Diagonalisierung über kA − UΛ Bestätigen Sie damit die generelle Skalierung der Matrix-Diagonalisierung. Hinweise: • Sie können zwischen vektorieller und Matrixnotation einer Diagonalmatrix mittels diag wechseln. • Die Zeit messen Sie wie folgt: 1 2 3 tic () ; [uv,ev] = eig (A); benoetigteZeitVonEig = toc () ; 2 Punkte 1 Einführung in die numerische Mathematik für Chemiker Prof. Dr. Bernd Hartke, [email protected] Henrik R. Larsson, [email protected] 3 Tests II Diagonalisieren Sie mit Ihrer Jacobi-Routine eine Hilbert-Matrix (siehe Übungsblatt 6) der Größe 30 und ermitteln Sie den Fehler der Diagonalisierung wie in Aufgabe 2. Vergleichen Sie mit Ihren Ergebnissen vom Übungsblatt 6 und erklären Sie den Befund. Wie lässt sich dieses Ergebnis nutzen, um die Matrix so abzuspeichern, dass weniger Speicherplatz benötigt wird? Hinweis: • Schauen Sie sich die Größe der Eigenwerte an. 2 Punkte 4 Bonusaufgabe: Lanczos-Verfahren Implementieren Sie das Lanczos-Verfahren. An Ihre Routine soll eine Funktion, welche die Matrix-VektorBerechnung ausführt, ein Startvektor, die relative Fehlertoleranz, sowie die maximale Krylov-Dimension übergeben werden. Ausgegeben werden soll der maximale Eigenwert der Matrix, der dazugehörige Eigenvektor, die Zahl der Iterationen und der tatsächliche Fehler. Auf einen Neustart mit besserem Startvektor, falls die max. Toleranz bei maximaler Krylovdimension noch nicht erreicht worden ist, können Sie der Einfachheit halber verzichten. Ihre Routine sollte aber nur die minimal nötige Krylov-Dimension nutzen. Diagonalisieren Sie dafür in jeder Iteration die Krylov-Matrix, um die Konvergenz des Eigenwertes festzustellen. Testen Sie ihre Routine mit einer dünnbesetzten Testmatrix (gallery(’wathen’,20,20)). Wie viele Iterationen brauchen Sie für eine relative Fehlertoleranz von 10−6 für verschiedene Zufallsstartvektoren? Überprüfen Sie das Ergebnis mit der Octave-Routine eigs. 5 Punkte 2
© Copyright 2024 ExpyDoc