Hessenberg-Matrix-Transf. < Matrizen < Lineare Algebra < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 17:15 Mi 20.06.2007 | Autor: | Burdy |
Aufgabe | Entwickeln sie einen Algorithmus, der eine Matrix mittels Ähnlichkeitstransformation durch Givensrotation auf Hessenbergform bringt. |
Ich soll einen Algorithmus aufschreiben, der eine Matrix mittels Givensrotation auf Hessenberg-Form [mm] (h_{ij}=0 [/mm] für alle i>j+1) bringt und gleichzeitig eine Ähnlichkeitstransformation ist, damit die Eigenwerte erhalten bleiben.
Für die gewöhnliche Givensrotation auf obere Dreiecksgestalt ohne Ähnlichkeitstransformation hab ich das schon mal aufgeschrieben:
H = A
for i = 1:n-1
for j = i+1:n
a = H(i,i);
b = H(j,i);
if ( b ~= 0)
c = a / [mm] sqrt(a^2 [/mm] + [mm] b^2);
[/mm]
s = b / [mm] sqrt(a^2 [/mm] + [mm] b^2);
[/mm]
G = eye(n); % Einheitsmatrix vom Rang n
G(i,i) = c;
G(j,j) = c;
G(i,j) = s;
G(j,i) = -s;
H = G*H;
end
end
end
Wenn ich da jetzt einfach zur Erzeugung einer Hessenberg-Matrix "j = i+1" auf "j = i+2" ändere, damit nicht zuerst der erste Eintrag unter der Diagonale eliminiert wird, sondern der 2. geht das zwar korrekt für die erste Spalte, aber bei der zweiten Spalte werden dann die in der ersten Spalte erzeugten Nullen teilweise wieder zerstört.
Eine Idee, wie man das umgehen kann wäre super.
Und wenn das gelöst ist hab ich noch das Problem, das, damit das ganze eine Ähnlichkeitstransformation ist, ich ja eigentlich jedes mal [mm] H=G^{T}*H*G [/mm] rechnen müsste und nicht H = G*H. Nur so, in der Form, wie das da jetzt steht, sind dann gleich alle Nullen weg.
Was muss ich denn dafür ändern?
Also irgendwie steh ich da grade aufm Schlauch und mir fällt nichts ein, ich wär für jede Hilfe dankbar.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:20 Sa 23.06.2007 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|