雅可比旋转
在数值线性代数中,雅可比旋转是n维内积空间中二维线性子空间的一种旋转变换,记作Qkℓ。当它作为相似变换应用时,可以将n×n实对称矩阵A的一对对称的非对角元素化为零:
[math]\displaystyle{ A\mapsto Q_{k\ell }^{T}AQ_{k\ell }=A'. }[/math]
[math]\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}}. }[/math]
这是雅可比特征值算法的核心操作,该算法具有数值稳定性,并且特别适合在并行处理器上实现。
这种变换只会影响矩阵A的第k行、第ℓ行以及第k列、第ℓ列,且变换后的矩阵A′仍保持对称性。在实际应用中,很少直接计算Qkℓ的矩阵形式;相反,我们会计算辅助值并以高效且数值稳定的方式更新A。不过作为参考,我们可以将旋转矩阵写作:
[math]\displaystyle{ Q_{k\ell }={\begin{bmatrix}1&&&&&&\\&\ddots &&&&0&\\&&c&\cdots &s&&\\&&\vdots &\ddots &\vdots &&\\&&-s&\cdots &c&&\\&0&&&&\ddots &\\&&&&&&1\end{bmatrix}}. }[/math]
这里,Qkℓ是一个单位矩阵,只有四个元素不同:对角线上两个元素(qkk和qℓℓ,都等于c)和对角线外对称位置的两个元素(qkℓ和qℓk,分别等于s和−s),其中c = cos θ,s = sin θ,θ是某个角度。这个矩阵形式与Givens旋转相同,但雅可比旋转选择的角度不同(大致是Givens旋转角度的一半),因为旋转要同时应用于矩阵的两侧。实际应用中不需要计算具体的角度值。使用克罗内克delta记号,矩阵元素可以写作:
[math]\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. }[/math]
假设h是一个不同于k或ℓ的指标(k和ℓ本身必须不同),那么相似变换在代数上产生以下结果:
[math]\displaystyle{ a'_{hk}=a'_{kh}=ca_{hk}-sa_{h\ell} }[/math]
[math]\displaystyle{ a'_{h\ell }=a'_{\ell h}=ca_{h\ell }+sa_{hk} }[/math]
[math]\displaystyle{ a'_{k\ell }=a'_{\ell k}=(c^{2}-s^{2})a_{k\ell }+sc(a_{kk}-a_{\ell \ell })=0 }[/math]
[math]\displaystyle{ a'_{kk}=c^{2}a_{kk}+s^{2}a_{\ell \ell }-2sca_{k\ell} }[/math]
[math]\displaystyle{ a'_{\ell \ell }=s^{2}a_{kk}+c^{2}a_{\ell \ell }+2sca_{k\ell}. }[/math]