Turnul lui Givens

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 7 noiembrie 2021; verificările necesită 2 modificări .

Dată rotație - în algebra liniară , un operator liniar pentru rotirea unui vector cu un unghi dat .

Matricea lui Givens [1] [2] [3]

Matricea Givens are următoarea formă:

Această matrice diferă de matricea de identitate doar prin submatrice

situate pe rânduri și coloane cu numere și . Este ortogonală.

Dacă este dat un vector , atunci alegând

cos ⁡ ϕ = A k A k 2 + A l 2 {\displaystyle \cos {\phi }={\frac {a_{k}}{\sqrt {a_{k}^{2}+a_{l}^{2))))} păcat ⁡ ϕ = − A l A k 2 + A l 2 {\displaystyle \sin {\phi }={\frac {-a_{l}}{\sqrt {a_{k}^{2}+a_{l}^{2)}))}

puteți seta a treia componentă a vectorului la zero :

[ cos ⁡ ϕ − păcat ⁡ ϕ păcat ⁡ ϕ cos ⁡ ϕ ] [ A k A l ] = [ cos ⁡ ϕ ⋅ A k − păcat ⁡ ϕ ⋅ A l păcat ⁡ ϕ ⋅ 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}}}

Folosind rotațiile lui Givens, se poate calcula descompunerea QR a matricelor și se poate desena matrici hermitiene într-o formă tridiagonală .

Folosind matrice Givens pentru tridiagonalizare

Să dorim să reducem o matrice simetrică la o formă tridiagonală:

Unde . Apoi o înmulțim cu matricea de rotație a lui Givens: . este matricea transpusă. Acest lucru va schimba doar elementele și

Aici primul denotă elementul care apare după rotație. Să alegem coeficienții și astfel încât elementul în afara diagonalei să fie setat la zero și relația dintre și cu și

Apoi:

O astfel de rotație este aplicată succesiv pentru a elimina toate elementele din primul rând, cu excepția primelor două. Adică (1,2), (1,3), (1,4)...(1,n) Apoi linia co-a doua (2,3),(2, 4)...(2) ,n)

Cod C++:

pentru ( unsigned int i = 0 ; i < N -1 ; ++ i ) { pentru ( unsigned int j = i + 2 ; j < N ; ++ j ) { t = 2 * matr [ i ][ j ] / ( matr [ i ][ i ] - matr [ j ][ j ]); phi = 0,5 * atan ( t ); c = cos ( phi ); s = sin ( 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 ; } }

Note

  1. Tyrtyshnikov E. E. Metode de analiză numerică. - M. , 2006. - S. 73-74.
  2. Björck, Åke, 1934-. Metode numerice pentru probleme cu cel puțin pătrate . - Philadelphia: SIAM, 1996. - S. 121-123. — xvii, 408 pagini p. - ISBN 0-89871-360-9 , 978-0-89871-360-2.
  3. Demmel, James W. Applied numerical linear algebra . - Philadelphia: Society for Industrial and Applied Mathematics, 1997. - S. 53-56. — xi, 419 pagini p. - ISBN 0-89871-389-7 , 978-0-89871-389-3, 0-89871-361-7, 978-0-89871-361-9.