摘抄自《数值线性代数(徐树方)》
Givens变换是一种将n维向量x在第(i,k)两个维度确定的坐标平面内进行旋转(从而将其中一个分量化0)的变换,因此它又叫平面旋转变换。
与Householder变换将一个向量中的若干个分量化0相比,Givens变换将向量的其中一个分量化0。
本篇先介绍Givens变换的定义及其性质,再推导一种用于求Givens变换的数值化方法
一、Givens变换的定义及性质
定义:Givens变换有以下形式:
公式1
其中:c=cosθ,s=sinθ ,易证G(i,k,θ)是一个正交矩阵。
公式1看起来有些复杂,但其实可以注意到G(i,k,θ)的构成十分简单:将n×n的单位矩阵I在(i,i),(i,k),(k,i),(k,k)位置的元素替换成c,s,-s,c,从数值上看,G(i,k,θ)x的结果y为
\[\left\{ \begin{array}{l}
{y_i} = c{x_i} + s{x_k}\\
{y_k} = - s{x_i} + c{x_k}\\
{y_j} = {x_j},j \ne i,k
\end{array} \right.\]
从几何上看,G(i,k,θ)的效果实际上是将向量x沿k→i的角度旋转了θ角度。
若要yk=0,只需取:
$c = \frac{{{x_i}}}{{\sqrt {x_i^2 + x_k^2} }},s = \frac{{{x_k}}}{{\sqrt {x_i^2 + x_k^2} }}$ 公式2
为了避免溢出,实际上并不是按照公式2计算c和s,而是按照以下公式:
\[\left[ {\begin{array}{*{20}{c}}
c&s\\
{ - s}&c
\end{array}} \right]\left[ \begin{array}{l}
a\\
b
\end{array} \right] = \left[ \begin{array}{l}
r\\
0
\end{array} \right]\]
二、用于计算Givens变换的算法