Givens zase

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 7. listopadu 2021; kontroly vyžadují 2 úpravy .

Daná rotace - v lineární algebře , lineární operátor pro otáčení vektoru o nějaký daný úhel .

Givensova matice [1] [2] [3]

Givensova matice má následující tvar:

Tato matice se liší od matice identity pouze podmaticí

umístěné na řádcích a sloupcích s čísly a . Je ortogonální.

Je-li dán vektor , pak výběr

cos ⁡ ϕ = A k A k 2 + A l 2 {\displaystyle \cos {\phi }={\frac {a_{k}}{\sqrt {a_{k}^{2}+a_{l}^{2))))} hřích ⁡ ϕ = − A l A k 2 + A l 2 {\displaystyle \sin {\phi }={\frac {-a_{l}}{\sqrt {a_{k}^{2}+a_{l}^{2))))}

můžete nastavit th komponentu vektoru na nulu :

[ cos ⁡ ϕ − hřích ⁡ ϕ hřích ⁡ ϕ cos ⁡ ϕ ] [ A k A l ] = [ cos ⁡ ϕ ⋅ A k − hřích ⁡ ϕ ⋅ A l hřích ⁡ ϕ ⋅ A k + cos ⁡ ϕ ⋅ A l ] = [ A k 2 + A l 2 A k 2 + A l 2 − A l ⋅ A k + A k ⋅ A l A k 2 + A l 2 ] = [ A k 2 + A l 2 0 ] {\displaystyle {\begin{bmatrix}\cos {\phi }&-\sin {\phi }\\\sin {\phi }&\cos {\phi }\end{bmatrix)){\begin{bmatrix} a_{k}\\a_{l}\end{bmatrix}}={\begin{bmatrix}\cos {\phi }\cdot a_{k}-\sin {\phi }\cdot a_{l}\\ \sin {\phi }\cdot a_{k}+\cos {\phi }\cdot a_{l}\end{bmatrix))={\begin{bmatrix}{\frac {a_{k}^{2} +a_{l}^{2}}{\sqrt {a_{k}^{2}+a_{l}^{2}}}}\\{\frac {-a_{l}\cdot a_{k }+a_{k}\cdot a_{l}}{\sqrt {a_{k}^{2}+a_{l}^{2}}}}\end{bmatrix}}={\begin{bmatrix} {\sqrt {a_{k}^{2}+a_{l}^{2}}}\\0\end{bmatrix}}}

Pomocí Givensových rotací lze vypočítat QR rozklad matic a nakreslit hermitovské matice do tridiagonální formy.

Použití Givensových matic pro tridiagonalizaci

Chceme redukovat symetrickou matici na tridiagonální tvar:

kde . Pak to vynásobíme Givensovou rotační maticí: . je transponovaná matice. Tím se změní pouze prvky a

Prvočíslo zde označuje prvek, který se objeví po otočení. Zvolme koeficienty a tak, aby mimodiagonální prvek byl nastaven na nulu a vztah mezi as a

Pak:

Takové otočení se aplikuje postupně, aby se vynulovaly všechny prvky prvního řádku, kromě prvních dvou. To znamená, (1,2), (1,3), (1,4)...(1,n) Pak druhý řádek (2,3), (2, 4)...(2 ,n)

C++ kód:

for ( unsigned int i = 0 ; i < N -1 ; ++ i ) { for ( unsigned int j = i + 2 ; j < N ; ++ j ) { t = 2 * matr [ i ][ j ] / ( matr [ i ][ i ] - matr [ j ][ j ]); = 0,5 * atan ( t ); c = cos ( ); s = hřích ( phi ); bii = c * c * matr [ i ][ i ] + 2 * c * s * matr [ i ][ j ] + s * s * matr [ j ][ j ]; bij = s * c * ( matr [ j ][ j ] - matr [ i ][ i ]) + matr [ i ][ j ] * ( c * c - s * s ); bjj = s * s * matr [ i ][ i ] + c * c * matr [ j ][ j ] - 2 * c * s * matr [ i ][ j ]; bji = bij ; matr [ i ][ i ] = bii ; matr [ i ][ j ] = bij ; matr [ j ][ i ] = bji ; matr [ j ][ j ] = bjj ; } }

Poznámky

  1. Tyrtyshnikov E. E. Metody numerické analýzy. - M. , 2006. - S. 73-74.
  2. Björck, Åke, 1934-. Numerické metody pro úlohy s alespoň čtverci . - Philadelphia: SIAM, 1996. - S. 121-123. — xvii, 408 stran s. - ISBN 0-89871-360-9 , 978-0-89871-360-2.
  3. Demmel, James W. Aplikovaná numerická lineární algebra . - Philadelphia: Společnost pro průmyslovou a aplikovanou matematiku, 1997. - S. 53-56. — xi, 419 stran str. - ISBN 0-89871-389-7 , 978-0-89871-389-3, 0-89871-361-7, 978-0-89871-361-9.