Ich brauche eine Givens-Rotation, die einen Matrixeintrag auf Null setzt, wenn sie mit dem multipliziert wird rechte Seite. Ich habe mir dieses Thema bereits angesehen https://math.stackexchange.com/questions/945736/givens-rotation-from-right-side , aber ich konnte den Weg dorthin nicht wirklich verstehen. P. >
Einige weitere Details: Ich muss Matrizen, A und B und ich müssen ihre Eigenwerte mit dem QZ-Algorithmus erhalten. Ich bringe B mit Givens-Rotationen von links in die triagonale Form. Diese Transformationen werden auch von links auf A angewendet. Nachdem B in triagonaler Form vorliegt, möchte ich A auch in triagonaler Form erhalten. Daher brauche ich Givens-Rotationen von rechts, damit die Nullen von Matrix B nicht zerstört werden (oder gibt es eine andere Möglichkeit, dies zu tun?)
Als Gleichung:
$$ \ begin {bmatrix} a & b \\ c & d \ end {bmatrix} \ cdot \ begin {bmatrix} e & f \\ g & h \ end {bmatrix} = \ begin {bmatrix} ae + bg & af + bh \\ ce + dg & cf + dh \ end {bmatrix} $$
mit
$$ ce + dg = 0 $$
Wie finde ich ein geeignetes e, f, g, h?
Kann mir jemand einige Hinweise geben, wie dies erreicht werden kann?
Vielen Dank im Voraus!
BEARBEITEN: Ich bin mir ziemlich sicher, dass es so funktioniert: $$ \ begin {bmatrix} a & b \ end {bmatrix } \ cdot \ begin {bmatrix} c & -s \\ s & c \ end {bmatrix} = \ begin {bmatrix} 0 & r \ end {bmatrix} $$
mit
$$ r = \ sqrt {a ^ 2 + b ^ 2 } $$ $$ c = \ frac {b} {r} $$ $$ s = \ frac {-a} {r} $$
Can Hat jemand dies gebilligt?
EDIT2: Betrachten Sie eine einfache 3×3-Matrix, die ich mithilfe dieser Givens-Rotation von rechts zu triangulieren versuche.
Ich kann Elemente (3,1) auf Null setzen ) und (2,1) unter Verwendung derselben Rotationsmatrix $ G $ mit unterschiedlichen Parametern $ c $ und $ s $. So kann ich eine Null wie diese erstellen
$ \ begin {bmatrix} * & * & * \\ * & * & * \\ a & b & * \ end {bmatrix} \ cdot \ begin {bmatrix} c & -s & 0 \\ s & c & 0 \\ 0 & 0 & 1 \ end {bmatrix} = \ begin {bmatrix} * & * & * \\ * & * & * \\ 0 & * & * \ end {bmatrix} $ ABER auch so $ \ begin {bmatrix} * & * & * \\ a & b & * \\ * & * & * \ end {bmatrix} \ cdot \ begin {bmatrix} c & -s & 0 \\ s & c & 0 \\ 0 & 0 & 1 \ end {bmatrix} = \ begin {bmatrix} * & * & * \\ 0 & * & * \\ * & * & * \ end {bmatrix} $ für dieselbe Rotationsmatrix $ G $. Dies macht es mir unmöglich, die Elemente iterativ auf Null zu setzen, da die zweite Drehung die in der ersten erstellte Null zerstört.
Es ist kein Problem, alle Elemente in der letzten Zeile außer der einen auf Null zu setzen am rechten unteren Rand (da jede Null von einer anderen Rotationsmatrix $ G $ erstellt wird).
Aber wie kann ich die in meinem Beispiel erwähnten Elemente auf Null setzen, wenn ich dieselbe Rotationsmatrix $ G verwende? $ was zerstört bereits erstellte Null-Elemente?
Bitte, jede Hilfe wird sehr geschätzt!
Kommentare
- Zum späteren Nachschlagen Eine Bearbeitung wie Ihre “ EDIT2 “ ist wahrscheinlich besser als zweite Frage zu stellen. So wie es derzeit ist, sollte es in Ruhe gelassen werden, da die Frage eine akzeptierte Antwort hat.
- WOW! Vielen Dank für Ihre ausführliche Antwort! Endlich habe ich den Hinweis bekommen, dass ich das Element (2,1) auf Null setzen muss 🙂
- Ich habe gerade deine Prozedur überprüft. Es funktioniert wirklich! Vielen Dank!
Antwort
Sie haben Recht. Mit der Auswahl $$ \ begin {eqnarray *} r & = & \ sqrt {a ^ 2 + b ^ 2} \\ [.6em] c & = & \ frac {b} {r} \\ [.6em] s & = & \ frac {-a} {r} \ end {eqnarray *} $$ a Givens-Rotation von der rechts ergibt $$ \ begin {pmatrix} a & b \ end {pmatrix} \ begin {pmatrix} c & -s \\ s & c \ end {pmatrix} = \ begin {pmatrix} ac + bs & -as + bc \ end {pmatrix} = \ begin {pmatrix} 0 & r \ end {pmatrix} \ ,, $$ weil $$ ac + bs = a \ frac {b} {r} + b \ frac { -a} {r} = \ frac {ab} {r} – \ frac {ab} {r} = 0 $$ und $$ – als + bc = -a \ frac {-a} {r} + b \ frac {b} {r} = \ frac {a ^ 2 + b ^ 2} {r} = \ frac {r ^ 2} {r} = r \ ,. $$ Achten Sie nur darauf, dass $ r \ neq0 $.
In Bezug auf EDIT2:
Sie können nur beide Elemente auf Null setzen $ (( 3,1) $ und $ (2,1) $ in Ihrem Beispiel mit derselben Givens-Rotationsmatrix, wenn die Matrix folgendermaßen aussieht: $$ \ begin {pmatrix} * & * & * \\ a & b & * \\ a & b * \ end {pmatrix} $$ In diesem Fall ergibt das Multiplizieren Ihrer Givens-Rotationsmatrix von rechts $$ \ begin {pmatrix} * & * & * \\ a & b & * \\ a & b & * \ end {pmatrix} \ begin {pmatrix} c & -s & 0 \\ s & c & 0 \\ 0 & 0 & 1 \ end {pmatrix} = \ begin {pmatrix} * & * & * \\ 0 & r & * \\ 0 & r & * \ end {pmatrix} \ ,, $$ und Sie haben beide Elemente gleichzeitig auf Null gebracht. Wenn die Zeilen 2 und 3 nicht beide $ \ begin {pmatrix} a & b & * \ end {pmatrix} $ sind, sind Sie benötigen unterschiedliche Rotationen, dh unterschiedliche $ c $ -, $ s $ – und $ r $ -Werte.
Was Sie in der Praxis tun, um eine Matrix auf die Form des oberen Dreiecks zu bringen, ist, mit der untersten Zeile und zu beginnen Bringen Sie alle Elemente außer dem letzten auf Null: $$ \ begin {pmatrix} * & * & * \\ * & * & * \\ a_1 & b_1 & * \ end {pmatrix} \ begin {pmatrix} c_1 & -s_1 & 0 \\ s_1 & c_1 & 0 \\ 0 & 0 & 1 \ end { pmatrix} = \ begin {pmatrix} * & * & * \\ * & * & * \\ 0 & r_1 & * \ end {pmatrix} = \ begin {pmatrix} *
* & * \\ * & * & * \\ 0 & a_2 & b_2 \ end {pmatrix} $$ und $$ \ begin {pmatrix} * & * & * \\ * & * & * \\ 0 & a_2 & b_2 \ end {pmatrix} \ begin {pmatrix} 1 & 0 & 0 \\ 0 & c_2 & -s_2 \ \ 0 & s_2 & c_2 \ end {pmatrix} = \ begin {pmatrix} * & * & * \\ * & * & * \\ 0 & 0 & r_2 \ end {pmatrix} \ ,. $$
Nun werden wir sehen, dass ein Zeilenvektor $ \ begin {pmatrix} 0 & 0 & * \ end {pmatrix} $ ist unter Givens-Rotationen von unveränderlich das rechte, das auf die erste Spalte abzielt: $$ \ begin {pmatrix} 0 & 0 & * \ end {pmatrix} \ begin { pmatrix} c & -s & 0 \\ s & c & 0 \\ 0 & 0 & 1 \ end {pmatrix} = \ begin {pmatrix} 0 \ cdot (c + s) & 0 \ cdot (cs) & 1 \ cdot * \ end {pmatrix} \ ,.$$
Damit können wir das Element $ (2,1) $ auf Null setzen, ohne die letzte Zeile zu ändern: $$ \ begin {pmatrix} * & * & * \\ a_3 & b_3 & * \\ 0 & 0 & r_2 \ end {pmatrix} \ begin {pmatrix} c_3 & -s_3 & 0 \\ s_3 & c_3 & 0 \\ 0 & 0 & 1 \ end {pmatrix} = \ begin {pmatrix} * & * & * \\ 0 & r_3 & * \\ 0 & 0 & r_2 \ end {pmatrix} \ ,, $$ und wir haben die obere Dreiecksform durch Anwenden von drei (verschiedenen) Givens-Rotationen von rechts erreicht.
Kommentare
- Bitte, sei so nett und schau dir meine zweite Bearbeitung an. Vielen Dank im Voraus.