Diskussion:Givens-Rotation

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 3 Jahren von 141.57.62.242 in Abschnitt Implementierungsvorschrift
Zur Navigation springen Zur Suche springen

Überarbeiten

[Quelltext bearbeiten]

Formal habe ich getan, was ich konnte, aber inhaltlich: Der letzte Absatz erweckt den Eindruck, einen wichtigen Inhalt transportieren zu sollen, wird diesem Anspruch aber in keinster Weise gerecht. Wer kann übersetzen?

Nebenbei: Ist die Verwendung der Transponierten der Givensmatrix bei der Rotation korrekt?

84.161.141.153 19:58, 11. Nov 2005 (CET)

  • Ich hoffe so ist es etwas besser. Es sollte vielleicht noch einmal beispielhaft gezeigt werden, wie man überhaupt auf eine Givens-Rotationsmatrix kommt.--CHW 20:16, 29. Nov 2005 (CET)


Bin mir 99,9% sicher, dass das Beispiel fehlerhaft ist. Ändere das mal schnell selbst. Beste Grüße Alex

Soweit ich das nachvollziehen kann ist mein Rechenaufwand größer, mit O(m!*[2*n*(n-1)+6]) überschlagen sind das O(m! * 2n^2) Gruß, Daniel

Das ist schon so richtig das mit der Fakultät wäre ja praktisch der helle Wahnsinn. 1000!*5^2 Rechenoperationen würden wohl den schnellsten Computer umhauen ;-) --Mathemaduenn 20:30, 23. Mai 2007 (CEST)Beantworten

Im Beispiel und in der Formel ist irgendwie der Wurm drin: In der Formel wird auf das Matrix-Element ajj zugegriffen. Bei G_{1,4} wäre dass dann ja a_{4,4}, aber A hat keine vierte Spalte. Kann doch irgendwie nicht sein, oder? Auch bei quadratischen Matrizen kommt nichts gescheites raus, hab den Algorithmus mal in Matlab geschrieben.

 function G = givens_example_doesnt_work(A, i, j)
   aij = A(i,j);
   ajj = A(j,j);
   p = sign(ajj)*sqrt(ajj^2+aij^2);
   c = ajj/p;
   s = -ajj/p;
   G = eye(size(A)(1));
   G([i j],[i j]) = c;
   G(i,j) = -s;
   G(j,i) = s;
 end

Hi, habe mich damit beschäftigt und packe dir eben die Lösung rein, VG der Martin

 function [Q,R] = QR_Givens(A)
   m = size(A,1);
   n = size(A,2); 
   Q = eye(m,m);
   for i=1:n-1
       for j=m:-1:i
           roh = sign(A(i,i))*sqrt(A(i,i)^2 + A(j,i)^2);
           c = A(i,i)/roh;
           s = A(j,i)/roh;
           H = G(i,j,c,s,m);
           Q = H * Q;
           A = H * A;
       end
   end    
   R = A;
 end
 function [R] = G(i,j,c,s,m)
   R = eye(m,m);
   R(i,i) = c;
   R(i,j) = s;
   R(j,i) = -s;
   R(j,j) = c; (nicht signierter Beitrag von 88.78.117.8 (Diskussion) 16:57, 18. Dez. 2013 (CET))
 endBeantworten

G*A oder G'*A sieht aber irgendwie nicht so aus wie erwartet. Gruß Max

wenn du s = -ajj/p; auf s = -aij/p; ausbesserst liefert G'*A das gewünschte Ergebnis
G(1,4) greift auch nicht auf a_{4,4} zu. Die richtige Notation wäre ja G(1,4,delta) wobei 1,4 angibt dass die erste und 4 Zeile rotiert werden und delta gibt den Winkel an - anstatt aber den Winkel zu berechnen ist es hier einfacher s und c direkt nach der angegebenen Vorschrift zu berechnen. Null setzen wollen wir hier a_{4,1} und a_{4,2} wir greifen also nur auf a_{1,1} und a_{2,2} zu.
lg Wdvorak 16:10, 3. Sep. 2008 (CEST)Beantworten

Lemma

[Quelltext bearbeiten]

Also den Begriff Givens-Drehung habe ich noch nie gehoert. Rotation ist ein gebraeuchlicher deutscher Begriff. --P. Birken 13:36, 7. Feb. 2007 (CET)Beantworten

Hmm mir ging's genau umgekehrt. Eigentlich würde imho auch keiner zu einer Drehung Rotation sagen. Muß ich nochmal in 2-3 Bücher schauen. --Mathemaduenn 14:08, 7. Feb. 2007 (CET)Beantworten
Ich habe es in der Vorlesung "Methoden der Informationstechnik: Digitale Mobilfunksysteme I + II" an der Uni-Dortmund unter dem Namen Givens-Rotation kennen gelernt. Auch in dem Skript wird ausschlißlich Givens-Rotation benutzt. Gruß André 8. Feb. 2007

Im Köckler/Schwarz wird der Begriff Givens-Rotation verwendet. Givens-Drehung habe ich auch noch nicht gehört. --Stefan Birkner 17:20, 7. Feb. 2007 (CET)Beantworten

Zurück vom kurzen Literaturcheck -Ergebnis unbefriedigend
  • in "Schwarz Numerische Mathematik" heißt das beschriebene Jacobi-Rotationen(der nennt die Givensrotation eine spezielle Jacobi Rotation also offenbar etwas anderes als das hier beschriebene?)
  • in "Schwetlick Numerische lineare Algebra" heißt es Givens-Drehung
  • in "Martin Hanke-Bourgeois Grundlagen der Numerischen Mathematik und des Wissenschaftlichen Rechnens" heißt's Givens-Rotation

@Stefan Kannst Du nochmal nachschauen ob das beschriebene dort nicht auch Jacobi Rotation heißt? --Mathemaduenn 17:40, 7. Feb. 2007 (CET)Beantworten

Ich hab's mal wieder zurückverschoben und nach Schwarz die "Jacobi Rotationen" mit reingeschrieben. Nach googel Test scheints mir doch eher eine einzelne Verwendung von Herrn Schwetlick gewesen zu sein. Grüße --Mathemaduenn 14:20, 8. Feb. 2007 (CET)Beantworten

Änderung

[Quelltext bearbeiten]

Die Konvention für Matrizen ist: zuerst die Zeile i, dann die Spalte j (nicht signierter Beitrag von 84.63.70.251 (Diskussion | Beiträge) 02:50, 15. Dez. 2009 (CET)) Beantworten

Q Matrix

[Quelltext bearbeiten]

Was ist dieses klein t hinter

auf die Englische Seite ist es nicht vorhanden und es ist hier nicht erklärt. Sollte es T sein? (nicht signierter Beitrag von 95.117.103.239 (Diskussion) 14:21, 27. Mai 2011 (CEST)) Beantworten

Ich habe die notation im beispiel überarbeitet - hoffe das passt jetzt so - Wdvorak 14:52, 27. Mai 2011 (CEST)Beantworten

Fehler im Beispiel

[Quelltext bearbeiten]

Das Beispiel scheint mir falsch zu sein, die zweite Zeile und die letzte Spalte von Q sind nicht normiert. Es muss wohl "1/sqrt(5)" statt "1/5" heißen oder sieht das jemand anders? --F GX 17:57, 23. Jul. 2011 (CEST)Beantworten

Ich habe es jetzt nachgerechnet und korrigiert. --F GX 15:36, 24. Jul. 2011 (CEST)Beantworten

Implementierungsvorschrift

[Quelltext bearbeiten]

Hallo ich glaube einige Fehler bei der Implemetierungsvorschrift für die Givens-Matrix gefunden zu haben. Für eine G(i, k)j,l Matrix ergeben sich laut Vorschrift nur dann in der Diagonale eine 1, wenn j==l gilt. Beispiel: Für eine Matrix G(i, k)1,3 entstehen in der Diagonalen somit niemals Einsen. Die anderen Vorschriften sollten auch mal geprüft werden. Aus meiner Sicht müsste es lauten:

G(i, k, θ)j,l = cos(x), für i=k=l oder i=k=j
G(i, k, θ)j,l = -sin(x), für i=l und k=j
G(i, k, θ)j,l = sin(x), für i=j und k=l
G(i, k, θ)j,l = 1, für i=k und k≠l oder i=k und k≠j
G(i, k, θ)j,l = 0, für alle weiteren Fälle

Falls ich mich nicht irre, könnte es sein dass jemadn mit den Indizes durcheinandergekommen ist? Ich würde außerdem Vorschlagen die die Matrix mit G(i,j)k,l, das wirkt etwas natürlicher.


Implementierungsbeispiel in Matlab für G(i, k, θ)j,l: ------------------

x = 2/3*pi(); s = sin(x); c = cos(x); m = 5;

j = 5; l = 4; G(:, :) = zeros(m);

for k = 1: m

   for i = 1: m
       if i==k
           if i==l || k==j
               G(i, k) = c;
           else
               G(i, k) = 1;
           end
       elseif i==j && k==l
           G(i, k) = s;
       elseif i==l && k==j
           G(i, k) = -s;
       else
           G(i, k) = 0;
       end
   end

end (nicht signierter Beitrag von 141.57.62.242 (Diskussion) 18:13, 21. Jan. 2021 (CET))Beantworten