Adott forgatás a lineáris algebrában , egy lineáris operátor egy vektor adott szöggel történő elforgatására .
A Givens mátrix alakja a következő:
Ez a mátrix csak az almátrixban tér el az identitásmátrixtól
sorokon és oszlopokon található számokkal és . Ortogonális.
Ha adott egy , vektor , akkor a választás
kötözősaláta ϕ = a k a k 2 + a l 2 {\displaystyle \cos {\phi }={\frac {a_{k}}{\sqrt {a_{k}^{2}+a_{l}^{2))))} bűn ϕ = − a l a k 2 + a l 2 {\displaystyle \sin {\phi }={\frac {-a_{l}}{\sqrt {a_{k}^{2}+a_{l}^{2))))}a vektor harmadik komponensét nullára állíthatja :
[ kötözősaláta ϕ − bűn ϕ bűn ϕ kötözősaláta ϕ ] [ a k a l ] = [ kötözősaláta ϕ ⋅ a k − bűn ϕ ⋅ a l bűn ϕ ⋅ a k + kötözősaláta ϕ ⋅ 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}}}A Givens-forgatások segítségével kiszámítható a mátrixok QR-felbontása , és a Hermitiánus mátrixokat háromszög alakúra rajzolhatjuk .
Le akarunk redukálni egy szimmetrikus mátrixot háromszög alakúra:
Hol . Ezután megszorozzuk a Givens-féle rotációs mátrixszal: . a transzponált mátrix. Ez csak a , és elemeket módosítja
Itt a prím a forgatás után megjelenő elemet jelöli. Válasszuk ki az együtthatókat és úgy, hogy az átlótól eltérő elem nullára legyen állítva, és a kapcsolat között és a
Akkor:
Ezt az elforgatást egymás után alkalmazzuk az első sor összes elemének nullázására, kivéve az első kettőt. Azaz (1,2), (1,3), (1,4)...(1,n) Ezután a (2,3),(2, 4)...(2) társ-második sor ,n )
C++ kód:
for ( unsigned int i = 0 ; i < N -1 ; ++ i ) { for ( előjel nélküli 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 ; } }