ik moet een Givens-Rotation krijgen, die een matrixinvoer op nul zet wanneer het wordt vermenigvuldigd met de rechter zijde. Ik heb dit onderwerp al bekeken https://math.stackexchange.com/questions/945736/givens-rotation-from-right-side , maar ik kon het proces om daar te komen niet echt begrijpen.
Nog wat details: ik heb matrices, A en B en ik moet hun eigenwaarden krijgen met behulp van het QZ-algoritme. Ik breng B naar een driehoekige vorm met behulp van Givens-Rotations van links. Deze transformaties worden ook vanaf de linkerkant op A toegepast. Nadat B in triagonale vorm is, wil ik A ook in triagonale vorm krijgen. Daarom heb ik Givens-Rotations van Right nodig zodat het de nullen van Matrix B niet vernietigt (of is er een andere mogelijkheid om dit te doen?)
Als vergelijking:
$$ \ 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} $$
met
$$ ce + dg = 0 $$
Hoe vind ik de juiste e, f, g, h?
Kan iemand mij enkele tips geven hoe ik dit kan bereiken?
Bij voorbaat hartelijk dank!
EDIT: Ik ben er vrij zeker van dat het zo werkt: $$ \ begin {bmatrix} a & b \ end {bmatrix } \ cdot \ begin {bmatrix} c & -s \\ s & c \ end {bmatrix} = \ begin {bmatrix} 0 & r \ end {bmatrix} $$
met
$$ r = \ sqrt {a ^ 2 + b ^ 2 } $$ $$ c = \ frac {b} {r} $$ $$ s = \ frac {-a} {r} $$
Kan keurt iemand dit goed?
EDIT2: Overweeg een eenvoudige 3×3-matrix die ik probeer driehoekig te maken met behulp van deze gegeven-rotatie van rechts.
Ik kan elementen op nul zetten (3,1 ) en (2,1) met dezelfde rotatiematrix $ G $ met verschillende parameters $ c $ en $ s $. Dus ik kan een nul als deze maken
$ \ 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} $ MAAR ook zo $ \ 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} $ voor dezelfde rotatiematrix $ G $. Dit maakt het voor mij onmogelijk om de elementen iteratief op nul te zetten, aangezien de tweede rotatie de nul die in de eerste is gemaakt, zal vernietigen.
Het is geen probleem om alle elementen in de laatste rij op nul te zetten, behalve die in de rechter onderrand (aangezien elke nul wordt gemaakt door een andere rotatiematrix $ G $).
Maar hoe kan ik bereiken dat de elementen die in mijn voorbeeld worden genoemd op nul worden gezet, wanneer ik dezelfde rotatiematrix $ G gebruik $ die reeds gemaakte nul-elementen vernietigt?
Alle hulp wordt zeer op prijs gesteld!
Opmerkingen
- Voor toekomstig gebruik , een bewerking zoals uw ” EDIT2 ” is waarschijnlijk beter gesteld als een tweede vraag. Zoals het nu is, moet het met rust worden gelaten omdat de vraag een geaccepteerd antwoord heeft.
- WOW! Heel erg bedankt voor je gedetailleerde antwoord! Eindelijk kreeg ik de hint die nodig was om element (2,1) op nul te zetten 🙂
- Controleer gewoon je procedure. Het werkt echt! Heel erg bedankt!
Antwoord
Je hebt gelijk. Met de keuze $$ \ begin {eqnarray *} r & = & \ sqrt {a ^ 2 + b ^ 2} \\ [.6em] c & = & \ frac {b} {r} \\ [.6em] s & = & \ frac {-a} {r} \ end {eqnarray *} $$ a Givens rotatie van de rechts levert $$ \ 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} \ ,, $$ omdat $$ ac + bs = a \ frac {b} {r} + b \ frac { -a} {r} = \ frac {ab} {r} – \ frac {ab} {r} = 0 $$ en $$ – as + bc = -a \ frac {-a} {r} + b \ frac {b} {r} = \ frac {a ^ 2 + b ^ 2} {r} = \ frac {r ^ 2} {r} = r \,. $$ Zorg ervoor dat $ r \ neq0 $.
Betreffende EDIT2:
Je kunt alleen beide elementen op nul zetten $ ( 3,1) $ en $ (2,1) $ in uw voorbeeld met dezelfde Givens-rotatiematrix als de matrix er als volgt uitziet: $$ \ begin {pmatrix} * & * & * \\ a & b & * \\ a & b * \ end {pmatrix} $$ En in dat geval levert het vermenigvuldigen van je Givens-rotatiematrix met 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} \ ,, $$ en je hebt beide elementen tegelijkertijd op nul gebracht. Als de rijen 2 en 3 niet beide $ \ begin {pmatrix} a & b & * \ end {pmatrix} $ zijn, verschillende rotaties nodig hebben, dwz verschillende $ c $, $ s $ en $ r $ waarden.
Wat je in de praktijk doet om een matrix op de bovenste driehoek te zetten, is beginnen met de onderste rij en breng alle elementen behalve de laatste op nul: $$ \ 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} $$ en $$ \ 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} \,. $$
Nu zullen we zien dat een rijvector $ \ begin {pmatrix} 0 & 0 & * \ end {pmatrix} $ is invariant onder Givens rotaties van het recht dat zich richt op de eerste kolom: $$ \ 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} \ ,.$$
Dit stelt ons in staat om het element $ (2,1) $ naar nul te brengen zonder de laatste rij te wijzigen: $$ \ 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} \ ,, $$ en we hebben de vorm van de bovenste driehoek bereikt door drie (verschillende) Givens-rotaties van rechts toe te passen.
Reacties
- Wees zo vriendelijk en kijk eens naar mijn tweede bewerking. Bij voorbaat hartelijk dank.