在数值线性代数中,雅可比旋转是 n 维内积空间的二维线性子空间的旋转 Qkℓ,在用做相似变换的时候,被选择来置零 n×n 实数对称矩阵 A 的非对角元素的对称对:
: A \mapsto Q_{k\ell}^T A Q_{k\ell} = A' . \,\!
:
\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\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_{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'_{hk} = a'_{kh} = c a_{hk} - s a_{h\ell} \,\!
: a'_{h\ell} = a'_{\ell h} = c a_{h\ell} + s a_{hk} \,\!
: a'_{k\ell} = a'_{\ell k} = (c^2-s^2)a_{k\ell} + sc (a_{kk} - a_{\ell\ell}) = 0 \,\!
: a'_{kk} = c^2 a_{kk} - s^2 a_{\ell\ell} - 2 s c a_{k\ell} \,\!
: a'_{\ell\ell} = c^2 a_{kk} - s^2 a_{\ell\ell} + 2 s c a_{k\ell} \,\!
数值稳定计算
要确定需要更改的数量,我们必须解远离对角的元素为零的方程。这蕴涵了
: \frac{c^2-s^2}{sc} = \frac{a_{\ell\ell} - a_{kk}}{a_{k\ell}} .
设 β 是这个数量的一半,
: \beta = \frac{a_{\ell\ell} - a_{kk}}{2 a_{k\ell}} .
如果 akℓ 是零,我们可以停止而不需要进行更改,因此我们永不除以零。设 t 是 tan ϑ。则通过一些三角恒等式我们简约这个方程为
: t^2 + 2\beta t - 1 = 0 . \,\!
为了稳定性我们选择解
: t = \frac{\sgn(\beta)}{|\beta|+\sqrt{\beta^2+1}} .
以此我们可以获得 c 和 s 为
: c = \frac{1}{\sqrt{t^2+1}} \,\!
: s = c t \,\!
尽管我们可以使用前面给出的代数更改等式,重写它们会更好。设
: \rho= \frac{s}{1+c} ,
所以 ρ = tan(ϑ/2)。则修订后的修改方程为
: a'_{hk} = a'_{kh} = a_{hk} - s (a_{h\ell} + \rho a_{hk}) \,\!
: a'_{h\ell} = a'_{\ell h} = a_{h\ell} + s (a_{hk} - \rho a_{h\ell}) \,\!
: a'_{k\ell} = a'_{\ell k} = 0 \,\!
: a'_{kk} = a_{kk} - t a_{k \ell} \,\!
: a'_{\ell\ell} = a_{\ell\ell} + t a_{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 [http://en.wikipedia.org/w/index.php?title=Special:Booksources&isbn=9780801854149 978-0-8018-5414-9]
评论 (0)