在数值线性代数 中,雅可比旋转 是 n 维内积空间 的二维线性子空间的旋转 Q k ℓ ,在用做相似变换 的时候,被选择来置零 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 ′ 将保持对称。还有给 Q k ℓ 的明显的矩阵很少被计算,转而计算辅助值,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}}.}
就是说,除了四个元素之外,Q k ℓ 是一个单位矩阵,两个在对角线上(q kk 和 q ℓℓ 都等于 c ) 而两个位于远离对角的位置上(q k ℓ 和 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 }}}.}
如果 a k ℓ 是零,我们可以停止而不需要进行更改,因此我们永不除以零。设 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 来重新生成由 Q k ℓ 确定的对称更改,带有 t 对零旋转设置为零。
参见
引用