前面介绍了四元数的定义以及什么是四元数的实保结构算法,接下来,我将介绍几个简单的利用实保结构算法的数值算法。
Givens变换
在数值算法中有一种算法叫做Givens变换,先简单介绍一下:
Givens变换是指形如:

的矩阵,其中c,s∈R满足∣c∣2+∣s∣2=1。有时我们亦称Givens变换为(i,j)平面的平面旋转变换。显然,Tij=G(i,j;c,s)是一个正交阵。
设x=(ξ1,ξ2,...,ξn)T∈Cn。并设y=G(i,j;c,s),x=(η1,η2,...,ηn)T。容易验证,当∣ξi∣2+∣ηj∣2=0时,若取
c=∣ξi∣2+∣ξj∣2∣ξi∣,s=∣ξi∣2+∣ξj∣2ξj∣ξi∣ξi,
则有
ηk=ξk,k=i,ηi=∣ξi∣ξi∣ξi∣2+∣ξj∣2,ηj=0,
即可以通过Givens变换把向量x的第j个分量化为零。
上面是在复数域上的Givens变换,同样适用于实数域上,但是是否可以运用在四元数域上呢?答案是可以的,不过如果直接运用四元数去求解c和s的话,会比较复杂,这里,我们可以运用实表示的方法来运用四元数Givens变换。
这里,我就直接给出实表示的G的构造形式。

乍一看,这还有点小复杂,不过仔细端详一下,大家就可以发现这是符合实表示矩阵的结构的,即满足:

其中1≤l≤n,α0,α1,α2,α3∈[−π/2,π/2)并且cos2α0+cos2α1+cos2α2+cos2α3=1。上述矩阵是JRS正交辛矩阵。
注意到当α2≡α3≡0时,上述Givens变换矩阵Gl为一个4n×4n的辛Givens旋转。
上述的四元数表示的Givens矩阵,可以将一个四元数向量的第l个元素化为0。
是不是很神奇呢,这里建议大家可以去用MATLAB变成实现一下,对该算法的理解会更加直观。
Householder变换
Householder变换是指如下形式的矩阵
H(w)=I−2ww∗,
其中w∈Cn满足w∗w=1。容易验证Householder变换具有如下基本性质:
-
detH(w)=−1;
-
H(w)∗=H(w)=H(w)−1;
- 对任意u∈w⊥,有
H(w)(u+βw)=u−βw,β∈C;
- 设a,b∈Cn,a=b,则存在Householder变换H(w)使得H(w)a=b成立的充分必要条件是
a∗a=b∗b,a∗b=b∗a;
并且在上述条件成立时,所需的向量w可取作
w=eiθ(a−b)∗(a−b)a−b,
其中,θ为任意实数。
**注:**有Householder变换的性质(4)可知,对任给的
a=(α1,α2,...,αn)T=0,
若令
δ={1,α1/∣α1∣,当α1=0时,当α1时,
并取
w=(δa+∣∣a∣∣2e1)∗(δa+∣∣a∣∣2e1)δa+∣∣a∣∣2e1=2∣∣a∣∣2(∣∣a∣∣2+∣α1∣)δa+∣∣a∣∣2e1,
则有H(w)a=−δ∣∣a∣∣2e1.而且当a是实向量时,这样得到的H(w)是实对称正交矩阵。
好了,上面就是对于复数域以及实数域上的Householder变换的一个描述以及具体的求解方法,接下来,我们就看看如何运用实表示方法来表示四元数矩阵的Householder变换。
这里我们直接给出实表示的Householder矩阵:

其中v是一个长度为n且第l−1个元素为0的向量,β是一个标量满足β(βvTv−2)=0.
通过对该矩阵的观察,我们可以看到该矩阵是四个n×n的Householder矩阵的直和,同样的,该矩阵也是JRS正交辛矩阵,且满足实表示矩阵的结构。
总结
到这里,我们就是简单介绍了如何用实表示的方法来对四元数矩阵来实施Givens变换和Householder变换,这两种变换在我看来是非常基础的,在后面的诸如保结构特征分解,保结构QR分解中都会用到。建议感兴趣的可以自己去编程实现一下。