四元数系列3——利用实表示来实施一些简单的数值算法

前面介绍了四元数的定义以及什么是四元数的实保结构算法,接下来,我将介绍几个简单的利用实保结构算法的数值算法。

Givens变换

在数值算法中有一种算法叫做Givens变换,先简单介绍一下:
Givens变换是指形如:
四元数系列3——利用实表示来实施一些简单的数值算法
的矩阵,其中c,sRc,s\in\mathbb{R}满足c2+s2=1|c|^2+|s|^2=1。有时我们亦称Givens变换为(i,j)(i,j)平面的平面旋转变换。显然,Tij=G(i,j;c,s)T_{ij}=G(i,j;c,s)是一个正交阵。
x=(ξ1,ξ2,...,ξn)TCnx=(\xi_1,\xi_2,...,\xi_n)^T\in \mathbb{C}^n。并设y=G(i,j;c,s),x=(η1,η2,...,ηn)Ty=G(i,j;c,s), x=(\eta_1,\eta_2,...,\eta_n)^T。容易验证,当ξi2+ηj20|\xi_i|^2+|\eta_j|^2\ne0时,若取
c=ξiξi2+ξj2,s=ξjξi2+ξj2ξiξi, c=\frac{|\xi_i|}{\sqrt{|\xi_i|^2+|\xi_j|^2}}, s=\frac{\overline{\xi_j}}{\sqrt{|\xi_i|^2+|\xi_j|^2}}\frac{\xi_i}{|\xi_i|},
则有
ηk=ξk,ki,ηi=ξiξiξi2+ξj2,ηj=0, \eta_k=\xi_k,k\ne i, \eta_i=\frac{\xi_i}{|\xi_i|}\sqrt{|\xi_i|^2+|\xi_j|^2},\eta_j=0,
即可以通过Givens变换把向量xx的第j个分量化为零。
上面是在复数域上的Givens变换,同样适用于实数域上,但是是否可以运用在四元数域上呢?答案是可以的,不过如果直接运用四元数去求解ccss的话,会比较复杂,这里,我们可以运用实表示的方法来运用四元数Givens变换。
这里,我就直接给出实表示的GG的构造形式。
四元数系列3——利用实表示来实施一些简单的数值算法
乍一看,这还有点小复杂,不过仔细端详一下,大家就可以发现这是符合实表示矩阵的结构的,即满足:
四元数系列3——利用实表示来实施一些简单的数值算法
其中1ln,α0,α1,α2,α3[π/2,π/2)1\le l \le n,\alpha_0,\alpha_1,\alpha_2,\alpha_3\in[-\pi/2,\pi/2)并且cos2α0+cos2α1+cos2α2+cos2α3=1\cos^2{\alpha_0}+\cos^2{\alpha_1}+\cos^2{\alpha_2}+\cos^2{\alpha_3}=1。上述矩阵是JRSJRS正交辛矩阵。
注意到当α2α30\alpha_2 \equiv \alpha_3 \equiv 0时,上述Givens变换矩阵GlG_l为一个4n×4n4n\times 4n的辛Givens旋转。

上述的四元数表示的Givens矩阵,可以将一个四元数向量的第ll个元素化为0。
是不是很神奇呢,这里建议大家可以去用MATLAB变成实现一下,对该算法的理解会更加直观。

Householder变换

Householder变换是指如下形式的矩阵
H(w)=I2ww, H(w)=I-2ww^*,
其中wCnw\in\mathbb{C}^n满足ww=1w^*w=1。容易验证Householder变换具有如下基本性质:

  1. detH(w)=1detH(w)=-1;
  2. H(w)=H(w)=H(w)1H(w)^*=H(w)=H(w)^{-1};
  3. 对任意uwu\in w^\bot,有
    H(w)(u+βw)=uβw,βC; H(w)(u+\beta w) = u-\beta w, \beta\in \mathbb{C};
  4. a,bCn,aba,b\in \mathbb{C}^n,a\ne b,则存在Householder变换H(w)H(w)使得H(w)a=bH(w)a=b成立的充分必要条件是
    aa=bb,ab=ba; a^*a=b^*b, a^*b=b^*a;

并且在上述条件成立时,所需的向量w可取作
w=eiθab(ab)(ab), w=e^{i\theta}\frac{a-b}{\sqrt{(a-b)^*(a-b)}},
其中,θ\theta为任意实数。
**注:**有Householder变换的性质(4)(4)可知,对任给的
a=(α1,α2,...,αn)T0, a=(\alpha_1,\alpha_2,...,\alpha_n)^T\ne0,
若令
δ={1,α1=0,α1/α1,α1, \delta=\left\{ \begin{matrix} 1, & \text{当}\alpha_1=0\text{时},\\ \overline{\alpha_1}/|\alpha_1|, & \text{当}\alpha_1\text{时}, \end{matrix} \right.
并取
w=δa+a2e1(δa+a2e1)(δa+a2e1)=δa+a2e12a2(a2+α1), w=\frac{\delta a+||a||_2e_1}{\sqrt{(\delta a+||a||_2e_1)^*(\delta a+||a||_2e_1)}}=\frac{\delta a+||a||_2e_1}{\sqrt{2||a||_2(||a||_2+|\alpha_1|)}},
则有H(w)a=δa2e1.H(w)a=-\overline{\delta}||a||_2e_1.而且当a是实向量时,这样得到的H(w)H(w)是实对称正交矩阵。

好了,上面就是对于复数域以及实数域上的Householder变换的一个描述以及具体的求解方法,接下来,我们就看看如何运用实表示方法来表示四元数矩阵的Householder变换。
这里我们直接给出实表示的Householder矩阵:
四元数系列3——利用实表示来实施一些简单的数值算法
其中vv是一个长度为nn且第l1l-1个元素为0的向量,β\beta是一个标量满足β(βvTv2)=0\beta(\beta v^Tv-2)=0.

通过对该矩阵的观察,我们可以看到该矩阵是四个n×nn\times n的Householder矩阵的直和,同样的,该矩阵也是JRSJRS正交辛矩阵,且满足实表示矩阵的结构。

总结

到这里,我们就是简单介绍了如何用实表示的方法来对四元数矩阵来实施Givens变换和Householder变换,这两种变换在我看来是非常基础的,在后面的诸如保结构特征分解,保结构QR分解中都会用到。建议感兴趣的可以自己去编程实现一下。