雅可比旋转

在数值线性代数中，雅可比旋转是 n 维内积空间的二维线性子空间的旋转 Qkℓ，在用做相似变换的时候，被选择来置零 n×n 实数对称矩阵 A 的非对角元素的对称对: A ↦ Q k ℓ T A Q k ℓ = A ′ . {\displaystyle A\mapsto Q_{k\ell }^{T}AQ_{k\ell }=A'.\,\!} [ ∗ ⋯ ∗ ⋱ a k k ⋯ a k ℓ ⋮ ⋮ ⋱ ⋮ ⋮ a ℓ k ⋯ a ℓ ℓ ⋱ ∗ ⋯ ∗ ] → [ ∗ ⋯ ∗ ⋱ a k k ′ ⋯ 0 ⋮ ⋮ ⋱ ⋮ ⋮ 0 ⋯ a ℓ ℓ ′ ⋱ ∗ ⋯ ∗ ] {\displaystyle {\begin{bmatrix}{*}&&&\cdots &&&*\\&\ddots &&&&&\\&&a_{kk}&\cdots &a_{k\ell }&&\\\vdots &&\vdots &\ddots &\vdots &&\vdots \\&&a_{\ell k}&\cdots &a_{\ell \ell }&&\\&&&&&\ddots &\\{*}&&&\cdots &&&*\end{bmatrix}}\to {\begin{bmatrix}{*}&&&\cdots &&&*\\&\ddots &&&&&\\&&a'_{kk}&\cdots &0&&\\\vdots &&\vdots &\ddots &\vdots &&\vdots \\&&0&\cdots &a'_{\ell \ell }&&\\&&&&&\ddots &\\{*}&&&\cdots &&&*\end{bmatrix}}} 它是雅可比特征值算法的核心运算，它是数值上稳定的并适合用并行计算实现。 注意到只有 A 的行 k 和 ℓ 与列 k 和 ℓ 受到影响，并且 A′ 将保持对称。还有给 Qkℓ 的明显的矩阵很少被计算，转而计算辅助值，A 也有效率和数值上稳定的方式更新。但是，为了引用，我们写矩阵为 Q k ℓ = [ 1 ⋱ 0 c ⋯ s ⋮ ⋱ ⋮ − s ⋯ c 0 ⋱ 1 ] . {\displaystyle Q_{k\ell }={\begin{bmatrix}1&&&&&&\\&\ddots &&&&0&\\&&c&\cdots &s&&\\&&\vdots &\ddots &\vdots &&\\&&-s&\cdots &c&&\\&0&&&&\ddots &\\&&&&&&1\end{bmatrix}}.} 就是说，除了四个元素之外，Qkℓ 是一个单位矩阵，两个在对角线上(qkk 和 qℓℓ 都等于 c) 而两个位于远离对角的位置上(qkℓ 和 Qℓk 分别等于 s 和 −s)。这里的 c = cos ϑ 而 s = sin ϑ 对于某个角度 ϑ；但是对于应用这种旋转，这个角度自身是不需要的。使用克罗内克δ符号，矩阵元素可以写为 q i j = δ i j + ( δ i k δ j k + δ i ℓ δ j ℓ ) ( c − 1 ) + ( δ i k δ j ℓ − δ i ℓ δ j k ) s . {\displaystyle q_{ij}=\delta _{ij}+(\delta _{ik}\delta _{jk}+\delta _{i\ell }\delta _{j\ell })(c-1)+(\delta _{ik}\delta _{j\ell }-\delta _{i\ell }\delta _{jk})s.\,\!} 假设 h 是不为 k 或 ℓ 的索引(它们自身必须是不同的)。类似的更改过程在代数上写为 a h k ′ = a k h ′ = c a h k − s a h ℓ {\displaystyle a'_{hk}=a'_{kh}=ca_{hk}-sa_{h\ell }\,\!} a h ℓ ′ = a ℓ h ′ = c a h ℓ + s a h k {\displaystyle a'_{h\ell }=a'_{\ell h}=ca_{h\ell }+sa_{hk}\,\!} a k ℓ ′ = a ℓ k ′ = ( c 2 − s 2 ) a k ℓ + s c ( a k k − a ℓ ℓ ) = 0 {\displaystyle a'_{k\ell }=a'_{\ell k}=(c^{2}-s^{2})a_{k\ell }+sc(a_{kk}-a_{\ell \ell })=0\,\!} a k k ′ = c 2 a k k − s 2 a ℓ ℓ − 2 s c a k ℓ {\displaystyle a'_{kk}=c^{2}a_{kk}-s^{2}a_{\ell \ell }-2sca_{k\ell }\,\!} a ℓ ℓ ′ = c 2 a k k − s 2 a ℓ ℓ + 2 s c a k ℓ {\displaystyle a'_{\ell \ell }=c^{2}a_{kk}-s^{2}a_{\ell \ell }+2sca_{k\ell }\,\!} 要确定需要更改的数量，我们必须解远离对角的元素为零的方程(Golub & Van Loan 1996，§8.4) harv error: no target: CITEREFGolubVan_Loan1996 (help)。这蕴涵了 c 2 − s 2 s c = a ℓ ℓ − a k k a k ℓ . {\displaystyle {\frac {c^{2}-s^{2}}{sc}}={\frac {a_{\ell \ell }-a_{kk}}{a_{k\ell }}}.} 设 β 是这个数量的一半， β = a ℓ ℓ − a k k 2 a k ℓ . {\displaystyle \beta ={\frac {a_{\ell \ell }-a_{kk}}{2a_{k\ell }}}.} 如果 akℓ 是零，我们可以停止而不需要进行更改，因此我们永不除以零。设 t 是 tan ϑ。则通过一些三角恒等式我们简约这个方程为 t 2 + 2 β t − 1 = 0. {\displaystyle t^{2}+2\beta t-1=0.\,\!} 为了稳定性我们选择解 t = sgn ⁡ ( β ) | β | + β 2 + 1 . {\displaystyle t={\frac {\operatorname {sgn}(\beta )}{|\beta |+{\sqrt {\beta ^{2}+1}}}}.} 以此我们可以获得 c 和 s 为 c = 1 t 2 + 1 {\displaystyle c={\frac {1}{\sqrt {t^{2}+1}}}\,\!} s = c t {\displaystyle s=ct\,\!} 尽管我们可以使用前面给出的代数更改等式，重写它们会更好。设 ρ = s 1 + c , {\displaystyle \rho ={\frac {s}{1+c}},} 所以 ρ = tan(ϑ/2)。则修订后的修改方程为 a h k ′ = a k h ′ = a h k − s ( a h ℓ + ρ a h k ) {\displaystyle a'_{hk}=a'_{kh}=a_{hk}-s(a_{h\ell }+\rho a_{hk})\,\!} a h ℓ ′ = a ℓ h ′ = a h ℓ + s ( a h k − ρ a h ℓ ) {\displaystyle a'_{h\ell }=a'_{\ell h}=a_{h\ell }+s(a_{hk}-\rho a_{h\ell })\,\!} a k ℓ ′ = a ℓ k ′ = 0 {\displaystyle a'_{k\ell }=a'_{\ell k}=0\,\!} a k k ′ = a k k − t a k ℓ {\displaystyle a'_{kk}=a_{kk}-ta_{k\ell }\,\!} a ℓ ℓ ′ = a ℓ ℓ + t a k ℓ {\displaystyle a'_{\ell \ell }=a_{\ell \ell }+ta_{k\ell }\,\!} 如前面提及的，我们永不需要明确的计算旋转角度 ϑ。事实上，我们可以通过只保留三个值 k, ℓ 和 t 来重新生成由 Qkℓ 确定的对称更改，带有 t 对零旋转设置为零。 Givens旋转 Golub, Gene H. & Charles F. Van Loan (1996), Matrix Computations (3rd ed.), Baltimore: Johns Hopkins University Press, ISBN 978-0-8018-5414-9 （页面存档备份，存于互联网档案馆）