摘抄自《數值線性代數(徐樹方)》
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變換的算法