Aufgabenbla 7: Matrixeigenwertproblem 1 Implementierung 2 Tests I

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