Potrzebuję uzyskać Givens-Rotation, który zeruje wpis macierzy po pomnożeniu z prawa strona. Zajrzałem już do tego tematu https://math.stackexchange.com/questions/945736/givens-rotation-from-right-side , ale nie mogłem zrozumieć, jak to osiągnąć.
Więcej szczegółów: Muszę mieć macierze, A i B oraz i Muszę uzyskać ich wartości własne za pomocą algorytmu QZ. Dostaję B do formy triagonalnej za pomocą Givens-Rotations od lewej. Te transformacje są również stosowane do A z lewej strony. Po tym, jak B jest w formie triagonalnej, chcę również uzyskać A w formie triagonalnej. Dlatego potrzebuję Givens-Rotations from Right, aby nie zniszczyły zer w Matrix B (czy jest inna możliwość, aby to zrobić?)
Jako równanie:
$$ \ 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} $$
with
$$ ce + dg = 0 $$
Jak znaleźć odpowiednie e, f, g, h?
Czy ktoś może mi podać kilka wskazówek, jak to osiągnąć?
Z góry dziękuję!
EDYCJA: Jestem prawie pewien, że to działa tak: $$ \ begin {bmatrix} a & b \ end {bmatrix } \ cdot \ begin {bmatrix} c & -s \\ s & c \ end {bmatrix} = \ begin {bmatrix} 0 & r \ end {bmatrix} $$
with
$$ r = \ sqrt {a ^ 2 + b ^ 2 } $$ $$ c = \ frac {b} {r} $$ $$ s = \ frac {-a} {r} $$
Czy ktoś to aprobuje?
EDYCJA2: Rozważ prostą macierz 3×3, którą próbuję ułożyć na trójkąt używając rotacji tych danych od prawej.
Mogę wyzerować elementy (3,1 ) i (2,1) używając tej samej macierzy rotacji $ G $ z różnymi parametrami $ c $ i $ s $. Więc mogę utworzyć zero w ten sposób
$ \ 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} $ ALE też tak $ \ 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} $ dla tej samej macierzy rotacji $ G $. To sprawia, że nie mogę wyzerować elementów iteracyjnie, ponieważ druga rotacja zniszczy zero utworzone w pierwszej.
Zerowanie wszystkich elementów w ostatnim wierszu z wyjątkiem jednego nie stanowi problemu. w prawej dolnej krawędzi (ponieważ każde zero jest tworzone przez inną macierz rotacji $ G $).
Ale jak mogę osiągnąć wyzerowanie elementów wymienionych w moim przykładzie, używając tej samej macierzy rotacji $ G $ która niszczy już utworzone elementy zerowe?
Bardzo mile widziana pomoc!
Komentarze
- Do wykorzystania w przyszłości , edycja taka jak Twoja ” EDIT2 ” jest prawdopodobnie lepiej ustawiona jako drugie pytanie. Tak jak jest obecnie, należy je zostawić w spokoju, ponieważ pytanie ma zaakceptowaną odpowiedź.
- WOW! Bardzo dziękuję za szczegółową odpowiedź! Wreszcie dostałem wskazówkę potrzebną do wyzerowania elementu (2,1) 🙂
- Właśnie sprawdziłem twoją procedurę. To naprawdę działa! Dziękuję bardzo!
Odpowiedź
Masz rację. Z wyborem $$ \ begin {eqnarray *} r & = & \ sqrt {a ^ 2 + b ^ 2} \\ [.6em] c & = & \ frac {b} {r} \\ [.6em] s & = & \ frac {-a} {r} \ end {eqnarray *} $$ a Obrót Givens z dobre plony $$ \ 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} \ ,, $$ ponieważ $$ ac + bs = a \ frac {b} {r} + b \ frac { -a} {r} = \ frac {ab} {r} – \ frac {ab} {r} = 0 $$ i $$ – as + bc = -a \ frac {-a} {r} + b \ frac {b} {r} = \ frac {a ^ 2 + b ^ 2} {r} = \ frac {r ^ 2} {r} = r \,. $$ Tylko uważaj, żeby $ r \ neq0 $.
Odnośnie EDIT2:
Możesz wyzerować tylko oba elementy $ ( 3,1) $ i $ (2,1) $ w Twoim przykładzie z tą samą macierzą rotacji Givens, jeśli macierz wygląda następująco: $$ \ begin {pmatrix} * & * & * \\ a & b & * \\ a & b * \ end {pmatrix} $$ A w takim przypadku pomnożenie macierzy rotacji Givens z prawej strony daje $$ \ 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} \ ,, $$ i wyzerowałeś oba elementy jednocześnie. Jeśli wiersze 2 i 3 nie są jednocześnie $ \ begin {pmatrix} a & b & * \ end {pmatrix} $, musisz potrzebują różnych obrotów, tj. różnych wartości $ c $, $ s $ i $ r $.
W praktyce wprowadzasz macierz do kształtu górnego trójkąta, zaczynając od najniższego wiersza i sprowadz wszystkie elementy oprócz ostatniego do zera: $$ \ 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} $$ and $$ \ 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} \,. $$
Teraz zobaczymy, że wektor wierszowy $ \ begin {pmatrix} 0 & 0 & * \ end {pmatrix} $ jest niezmienne przy obrotach Givensa od prawa, która kieruje do pierwszej kolumny: $$ \ 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} \ ,.$$
To pozwala nam zerować element $ (2,1) $ bez zmiany ostatniego wiersza: $$ \ 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} \ ,, $$ i osiągnęliśmy kształt górnego trójkąta, stosując trzy (różne) obroty Givensa od prawej strony.
Komentarze
- Proszę, bądź taki uprzejmy i spójrz na moją drugą edycję. Z góry dziękuję.