eu preciso obter uma Givens-Rotation, que zera uma entrada de matriz quando multiplicada de lado direito. Já examinei este tópico https://math.stackexchange.com/questions/945736/givens-rotation-from-right-side , mas não pude realmente entender o processo de chegar lá.
Mais alguns detalhes: Eu preciso das matrizes A e B e preciso obter seus autovalores usando o algoritmo QZ. Eu coloco B na forma triagonal usando Givens-Rotations da esquerda. Essas transformações são aplicadas a A do lado esquerdo também. Depois que B estiver na forma triagonal, quero obter A na forma triagonal também. Portanto, preciso de Givens-Rotations from Right para que não destrua os zeros da Matriz B (ou existe outra possibilidade de fazer isso?)
Como uma equação:
$$ \ 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} $$
com
$$ ce + dg = 0 $$
Como encontrar e, f, g, h adequados?
Alguém pode me fornecer algumas dicas de como fazer isso?
Muito obrigado!
EDITAR: Tenho quase certeza de que funciona assim: $$ \ begin {bmatrix} a & b \ end {bmatrix } \ cdot \ begin {bmatrix} c & -s \\ s & c \ end {bmatrix} = \ begin {bmatrix} 0 & r \ end {bmatrix} $$
com
$$ r = \ sqrt {a ^ 2 + b ^ 2 } $$ $$ c = \ frac {b} {r} $$ $$ s = \ frac {-a} {r} $$
Pode Alguém aprova isso?
EDIT2: Considere uma matriz 3×3 simples que estou tentando triangularizar usando a rotação desses dados da direita.
Posso zerar os elementos (3,1 ) e (2,1) usando a mesma matriz de rotação $ G $ com parâmetros $ c $ e $ s $ diferentes. Portanto, posso criar um Zero como este
$ \ 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} $ MAS também assim $ \ 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} $ para a mesma Matriz de Rotação $ G $. Isso torna impossível para mim zerar os elementos iterativamente, pois a segunda rotação destruirá o zero criado na primeira.
Não é problema zerar todos os elementos na última linha, exceto aquele na borda inferior direita (já que cada Zero é criado por outra Matriz de Rotação $ G $).
Mas como posso zerar os elementos mencionados no meu exemplo, ao usar a mesma Matriz de Rotação $ G $ que destrói elementos-zero já criados?
Por favor, qualquer ajuda é muito apreciada!
Comentários
- Para referência futura , uma edição como sua ” EDIT2 ” provavelmente é melhor colocada como uma segunda pergunta. Como está atualmente, deve ser deixado sozinho porque a pergunta tem uma resposta aceita.
- WOW! Muito obrigado pela sua resposta detalhada! Finalmente recebi a dica necessária para zerar o elemento (2,1) 🙂
- Acabei de verificar seu procedimento. Realmente funciona! Muito obrigado!
Resposta
Você está correto. Com a escolha $$ \ begin {eqnarray *} r & = & \ sqrt {a ^ 2 + b ^ 2} \\ [.6em] c & = & \ frac {b} {r} \\ [.6em] s & = & \ frac {-a} {r} \ end {eqnarray *} $$ a rotação Givens do certo rende $$ \ 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} \ ,, $$ porque $$ ac + bs = a \ frac {b} {r} + b \ frac { -a} {r} = \ frac {ab} {r} – \ frac {ab} {r} = 0 $$ e $$ – as + bc = -a \ frac {-a} {r} + b \ frac {b} {r} = \ frac {a ^ 2 + b ^ 2} {r} = \ frac {r ^ 2} {r} = r \,. $$ Apenas tome cuidado com $ r \ neq0 $.
Em relação ao EDIT2:
Você só pode zerar ambos os elementos $ ( 3,1) $ e $ (2,1) $ em seu exemplo com a mesma matriz de rotação de Givens se a matriz for assim: $$ \ begin {pmatrix} * & * & * \\ a & b & * \\ a & b * \ end {pmatrix} $$ E, nesse caso, multiplicar sua matriz de rotação de Givens a partir da direita resulta em $$ \ 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} \ ,, $$ e você trouxe os dois elementos a zero simultaneamente. Se as linhas 2 e 3 não forem $ \ begin {pmatrix} a & b & * \ end {pmatrix} $, você precisam de rotações diferentes, ou seja, valores $ c $, $ s $ e $ r $ diferentes.
O que você faz na prática para trazer uma matriz na forma de triângulo superior é começar com a linha mais baixa e traga todos os elementos, exceto o último, para zero: $$ \ 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} = \ começar {pmatrix} *
* & * \\ * & * & * \\ 0 & a_2 & b_2 \ end {pmatrix} $$ e $$ \ 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} \,. $$
Agora, veremos que um vetor linha $ \ begin {pmatrix} 0 & 0 & * \ end {pmatrix} $ é invariante sob rotações de Givens de a direita que visa a primeira coluna: $$ \ 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} \ ,.$$
Isso nos permite trazer o elemento $ (2,1) $ para zero sem alterar a última linha: $$ \ 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} \ ,, $$ e alcançamos a forma do triângulo superior aplicando três (diferentes) rotações de Givens da direita.
Comentários
- Por favor, seja gentil e dê uma olhada na minha segunda edição. Muito obrigado desde já.