- 20 April 2006
- 22.682
- 1.316
Moin,
ich verzweifle langsam... ich möchte gerne eine QR-Zerlegung machen, aber es will nicht so wirklich hinhauen. Da meine Infos spärlich sind, wie jetzt konkret der Algorithmus funktioniert und auch das Netz nur mathematischen Formelwust liefert, möchte ich gerne von euch mal wissen, was ich falsch mache.
Konkret gehe ich so vor:
(im Folgenden sind die Zeilen und Spalten von Matrizen und Komponenten von Vektoren von 0 ab gezählt, nicht wie mathematisch normal mit 1 ^^)
Für 2x2-Matrizen funktioniert es. Bei den 3x3-Matrizen funktioniert es nicht mehr, wenn in der ersten Spalte die unteren beiden Zeilen belegt sind.
Drum tippe ich mal auf einen Fehler beim ?.
Auch ist mein letztes ? immer der Nullvektor, was für mich nicht wirklich viel Sinn ergibt, aber nach meinem Vorgehen eigentlich ganz logisch ist: Beim letzten Schritt besteht mein Vektor x nur noch aus einer Komponente. Ich fülle dann mit Nullen auf und bekomme mein ? als ?=[0; 0; ?]. Ziehe ich nun in der letzten Komponente einmal seine Norm, die ja wieder ? ist, ab, erhalte ich logischerweise den Nullvektor als ?.
Enthält A nun negative Einträge, dann gibts keinen Nullvektor. Da hab ich mich schon gefragt, ob vielleicht irgendwie ein Betrag irgendwo fehlt.
Ich weiß irgendwie gar nicht, ob ich es jetzt kapiert hab, wie es geht oder ob ich noch was falsch habe. Stimmt mein Vorgehen und das sind nur alles Rundungsfehler oder passt da was nicht?
Ihr könnt euch ja mal angucken, was ich so gemacht hab:
https://www.thehacker.ws/dummy/qr2.html
https://www.thehacker.ws/dummy/qr3.html
Einmal eine 2x2-Matrix, wo alles klappt und einmal eine 3x3-Matrix, wo sich am Ende alles unterscheidet. Entweder ich krieg A nicht wieder raus oder aber R ist keine Dreiecksmatrix.
ich verzweifle langsam... ich möchte gerne eine QR-Zerlegung machen, aber es will nicht so wirklich hinhauen. Da meine Infos spärlich sind, wie jetzt konkret der Algorithmus funktioniert und auch das Netz nur mathematischen Formelwust liefert, möchte ich gerne von euch mal wissen, was ich falsch mache.
Konkret gehe ich so vor:
(im Folgenden sind die Zeilen und Spalten von Matrizen und Komponenten von Vektoren von 0 ab gezählt, nicht wie mathematisch normal mit 1 ^^)
- A[sub]0[/sub] := A
- Für i von 0 bis n-1
- Ich hole mir aus A[sub]i[/sub] den Spaltenvektor x der (i+1)-ten Zeile und ersetze die ersten i Einträge mit 0
Im Beispiel der 3x3-Matrix wäre der Vektor- für i = 0: x[A[sub]0, 0[/sub]; A[sub]0, 1[/sub]; A[sub]0, 2[/sub]]
- für i = 1: x[0; A[sub]1, 1[/sub]; A[sub]1, 2[/sub]]
- für i = 2: x[0; 0; A[sub]2, 2[/sub]]
- von diesem Vektor x wird dessen Norm an der i-ten Komponente abgezogen, somit erhalte ich den Vektor ?[sub]i[/sub]
- Mit ?[sub]i[/sub] kann ich mir Q[sub]i[/sub] gemäß folgender Formel bauen:Q[sub]i[/sub] = E - 2 (?[sub]i[/sub] * (?[sub]i[/sub])[sup]T[/sup]) / ??[sub]i[/sub]?[sup]2[/sup]
- Mit dem Q[sub]i[/sub] bau ich mir das A[sub]i+1[/sub] alsA[sub]i+1[/sub] = Q[sub]i[/sub] * A[sub]i[/sub]
- Ich hole mir aus A[sub]i[/sub] den Spaltenvektor x der (i+1)-ten Zeile und ersetze die ersten i Einträge mit 0
- Zum Schluss ermittelte ich mein ganzes Q, Q[sub]gesamt[/sub] genannt, mit Q[sub]gesamt[/sub] = Q[sub]n-1[/sub] * ... * Q[sub]1[/sub] * Q[sub]0[/sub]
- R ist dann A[sub]n-1[/sub] oder mit Hilfe von Q ergibt sich R = Q[sup]-1[/sup] * A bzw. weil weil Q orthogonal ist als R = Q[sup]T[/sup] * A
Für 2x2-Matrizen funktioniert es. Bei den 3x3-Matrizen funktioniert es nicht mehr, wenn in der ersten Spalte die unteren beiden Zeilen belegt sind.
Drum tippe ich mal auf einen Fehler beim ?.
Auch ist mein letztes ? immer der Nullvektor, was für mich nicht wirklich viel Sinn ergibt, aber nach meinem Vorgehen eigentlich ganz logisch ist: Beim letzten Schritt besteht mein Vektor x nur noch aus einer Komponente. Ich fülle dann mit Nullen auf und bekomme mein ? als ?=[0; 0; ?]. Ziehe ich nun in der letzten Komponente einmal seine Norm, die ja wieder ? ist, ab, erhalte ich logischerweise den Nullvektor als ?.
Enthält A nun negative Einträge, dann gibts keinen Nullvektor. Da hab ich mich schon gefragt, ob vielleicht irgendwie ein Betrag irgendwo fehlt.
Ich weiß irgendwie gar nicht, ob ich es jetzt kapiert hab, wie es geht oder ob ich noch was falsch habe. Stimmt mein Vorgehen und das sind nur alles Rundungsfehler oder passt da was nicht?
Ihr könnt euch ja mal angucken, was ich so gemacht hab:
https://www.thehacker.ws/dummy/qr2.html
https://www.thehacker.ws/dummy/qr3.html
Einmal eine 2x2-Matrix, wo alles klappt und einmal eine 3x3-Matrix, wo sich am Ende alles unterscheidet. Entweder ich krieg A nicht wieder raus oder aber R ist keine Dreiecksmatrix.
