QR分解的实际计算有很多方法,例如Givens旋转、Householder变换,以及Gram-Schmidt正交化等等。每一种方法都有其优点和不足。
使用Householder变换
Householder变换
Householder变换将一个向量关于某个平面或者超平面进行反射。我们可以利用这个操作对 的矩阵 进行QR分解。
矩阵 可以被用于对一个向量以一种特定的方式进行反射变换,使得它除了一个维度以外的其他所有分量都化为0。
令 为矩阵 的任一m维实列向量,且有 (其中 为标量)。若该算法是通过浮点数实现的,则 应当取和 的第 维相反的符号(其中 是要保留不为0的项),这样做可以避免精度缺失。对于复数的情况,令
-
(Stoer & Bulirsch 2002,p.225),并且在接下来矩阵 的构造中要将矩阵转置替换为共轭转置。
接下来,设 为单位向量 ,||·||为欧几里德范数, 为 单位矩阵,令
- ,
- ,
- 。
或者,若 为复矩阵,则
- ,其中
- 式中 是 的共轭转置(亦称埃尔米特共轭或埃尔米特转置)。
则 为一个 的Householder矩阵,它满足
-
利用Householder矩阵,可以将一个 的矩阵 变换为上三角矩阵。
首先,我们将A左乘通过选取矩阵的第一行得到行向量 的Householder矩阵 。这样,我们得到的矩阵 的第一列将全部为0(第一行除外):
-
这个过程对于矩阵 (即 排除第一行和第一列之后剩下的方阵)还可以继续做下去,从而得到另一个Householder矩阵 。注意到 其实比 要小,因为它是在 而非 的基础上得到的。因此,我们需要在 的左上角补上1,或者,更一般地来说:
-
将这个迭代过程进行 次之后( ),将有
-
其中R为一个上三角矩阵。因此,令
-
则 为矩阵 的一个QR分解。
相比与Gram-Schmidt正交化,使用Householder变换具有更好的数值稳定性。
例子
现在要用Householder变换求解矩阵 的 分解。
-
因为 , 令 ,则
-
则有
-
从而,
-
记 , 则 。令
-
-
记,
-
则,
-
那么
-
使用吉文斯旋转
吉文斯旋转
吉文斯旋转表示为如下形式的矩阵
-
这里的 c = cos(θ) 和 s = sin(θ) 出现在第 i 行和第 j 行与第 i 列和第 j 列的交叉点上。就是说,吉文斯旋转矩阵的所有非零元定义如下::
-
乘积 G(i, j, θ)x 表示向量 x 在 (i,j)平面中的逆时针旋转 θ 弧度。
吉文斯旋转作用于QR分解
对于一个向量
-
如果, , , ,
那么,就存在旋转矩阵G,使 底部转成0。
-
每一次的旋转,吉文斯旋转都可以将一个元素化成0,直到将原始矩阵转成一个上三角矩阵,则完成分解。
-
-
例子
-
-
-
-
-
对于: 子矩阵 :
-
-
-
-
-
-
-
使用格拉姆-施密特正交化方法
基本思想
图1
在
上投影,构造
上的正交基
格拉姆-施密特正交化的基本想法,是利用投影原理在已有正交基的基础上构造一个新的正交基。
设 。 是 上的 维子空间,其标准正交基为 ,且 不在 上。由投影原理知, 与其在 上的投影 之差
-
是正交于子空间 的,亦即 正交于 的正交基 。因此只要将 单位化,即
-
那么 就是 在 上扩展的子空间 的标准正交基。
根据上述分析,对于向量组 张成的空间 ( ),只要从其中一个向量(不妨设为 )所张成的一维子空间 开始(注意到 就是 的正交基),重复上述扩展构造正交基的过程,就能够得到 的一组正交基。这就是格拉姆-施密特正交化。
格拉姆-施密特正交化算法
首先需要确定已有基底向量的顺序,不妨设为 。Gram-Schmidt正交化的过程如下:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这样就得到 上的一组正交基 ,以及相应的标准正交基 。
例子
现在要用格拉姆-施密特变换求解矩阵 的 分解。
-
令,
-
-
-
-
-
那么可知,
-
由 ,可知,
-