QR方法是Francis于1961年发表的用于求解所有特征值的算法呢。该算法对对称矩阵和非对称矩阵都适用,都可以分解成正交矩阵Q和上三角矩阵R乘机的形式。但是在实际应用中,需要先进行相似变化在OR分解。其中,对于非对称矩阵,需要利用Hessenberg矩阵;而对于对称矩阵,需要利用三对角矩阵。如果再加上最后要讲的原点位移、降阶等技巧,整套算法会变得相当复杂。该方法是利用2个正交矩阵的乘机一定是正交矩阵,正交矩阵的逆矩阵也是正交矩阵,故QR分解是利用了上述特点,即对正交矩阵进行多次分解,相乘。
用QR方法求解矩阵特征值的基本流程:
(1)对需要求解的特征值得矩阵进行QR分解
(2)对分解出来的结果进行逆向相乘
(3)将相乘得到的矩阵进行QR分解
(4)对分解出来的结果进行逆向相乘
。。。。。
其中Q*Q^T=I,Q为正交矩阵,R为非奇异上三角矩阵。
Hessenberg矩阵
在上三角矩阵的基础上,若其对角线左下方的一条斜线不为0,则该方阵成为Hessenberg矩阵,也称海森伯格矩阵,如下图所示。
在Hessenberg矩阵进行迭代时,首先Hessenberg矩阵的左下角都为0,可知Hessenberg矩阵在进行对应元素相乘时,经过0元素相乘,使其对应位置的元素值为0。从而Hessenberg矩阵的次对角线元素的值逐渐趋向于0,也就能达到接近去上三角矩阵的形式。随着元素中0的个数逐渐增加,达到了QR分解的计算量得到了减少。
如果将矩阵转换为Hessenberg矩阵,则是Householder方法,接下来将介绍Householder方法。
Householder方法
该方法是利用镜像变化,将一般的非对称矩阵通过相似变换得到Householder方法。该方法是将空间中的任一点x,变换到与其关于经过原点的超平面的另一点x',这样的变换称为镜像变换。
令经过原点的超平面的单位法向量为u,u为列向量,u^Tx是数。
变换后的x'为:
于是线性变换可以用:
步骤:
(1)对于矩阵转换为Hessenberg矩阵时,需要每一列计算一次,比如说第一列。
对于一个任意的列向量x,模为||x||=|α|对于标量α。如果算法是使用浮点型算法实现的,那么α应该得到与第k个坐标相反的符号x,x_k是变换后的上三角形式的坐标,其余为0。则,设置。
对于矢量e1=(1,0,...,0)^T,有
则
将第一列转换完之后,按照这样的思路去掉第一行以及第一列进行第二词的矩阵转换。最后将完成整体H的转换。
例子
(1)Householder方法
首先,需要转换矩阵A的第一列向量a1=(12,6,-4)^T,则有
通过Q_1A可知第一列已经满足了我们的需求,结果如下所示。
采取上述方法进行第二次的转换,转换矩阵为:
由于第一次已经计算过了,所以Q2需要把第一次计算的向量也加进去,得到了最终的Q2
则Q为
R为
(2)gram-schmidt方法
参考
https://wenku.baidu.com/view/ce6de5f2a32d7375a5178015.html
https://en.wikipedia.org/wiki/QR_decomposition