QR分解
定义
实数矩阵A的QR分解是把A分解为
这里的Q是正交矩阵(意味着QQ = I)而R是上三角矩阵。类似的,我们可以定义A的QL, RQ和LQ分解。
更一般的说,我们可以因数分解复数m{\displaystyle m}×n{\displaystyle n}矩阵(有着m ≥ n)为m{\displaystyle m}×n{\displaystyle n}酉矩阵(在QQ = I的意义上)和n{\displaystyle n}×n{\displaystyle n}上三角矩阵的乘积。
如果A是非奇异的,且限定R 的对角线元素为正,则这个因数分解是唯一的。
QR分解的求法
QR分解的实际计算有很多方法,例如Givens旋转、Householder变换,以及Gram-Schmidt正交化等等。每一种方法都有其优点和不足。
Gram-Schmidt正交化
使用Householder变换
Householder变换将一个向量关于某个平面或者超平面进行反射。我们可以利用这个操作对m× × -->n(m≧ ≧ -->n){\displaystyle m\times n(m\geqq n)}的矩阵A{\displaystyle A}进行QR分解。
矩阵Q{\displaystyle Q}可以被用于对一个向量以一种特定的方式进行反射变换,使得它除了一个维度以外的其他所有分量都化为0。
令x{\displaystyle \mathbf {x} }为矩阵A{\displaystyle A}的任一m维实列向量,且有∥ ∥ -->x∥ ∥ -->=|α α -->|{\displaystyle \|\mathbf {x} \|=|\alpha |}(其中α α -->{\displaystyle \alpha }浮点数)。若该算法是通过浮点数实现的,则α α -->{\displaystyle \alpha }应当取和x{\displaystyle \mathbf {x} }的第k{\displaystyle k}维相反的符号(其中xk{\displaystyle x_{k}}是要保留不为0的项),这样做可以避免精度缺失。对于复数的情况,令
(Stoer & Bulirsch 2002,p.225),并且在接下来矩阵Q{\displaystyle Q}的构造中要将矩阵转置替换为共轭转置。
接下来,设e1{\displaystyle \mathbf {e} _{1}}为单位向量(1,0,⋯ ⋯ -->,0)T{\displaystyle (1,0,\cdots ,0)^{T}},||·||为欧几里的范数,I{\displaystyle I}为m× × -->m{\displaystyle m\times m}单位矩阵,令
或者,若A{\displaystyle A}为复矩阵,则
则Q{\displaystyle Q}为一个m× × -->m{\displaystyle m\times m}的Householder矩阵,它满足
利用Householder矩阵,可以将一个m× × -->n{\displaystyle m\times n}的矩阵A′{\displaystyle A"}变换为上三角矩阵。 首先,我们将A左乘通过选取矩阵的第一列得到列向量x{\displaystyle x}的Householder矩阵Q1{\displaystyle Q_{1}}。这样,我们得到的矩阵Q1A{\displaystyle Q_{1}A}的第一列将全部为0(第一行除外):
这个过程对于矩阵A′{\displaystyle A"}(即Q1A{\displaystyle Q_{1}A}排除第一行和第一列之后剩下的方阵)还可以继续做下去,从而得到另一个Householder矩阵Q2{\displaystyle Q_{2}}。注意到Q2{\displaystyle Q_{2}}其实比Q1{\displaystyle Q_{1}}要小,因为它是在Q1A{\displaystyle Q_{1}A}而非A{\displaystyle A}的基础上得到的。因此,我们需要在Q2{\displaystyle Q_{2}}的左上角补上1,或者,更一般地来说:
将这个迭代过程进行t{\displaystyle t}次之后(t=min(m− − -->1,n){\displaystyle t=\min(m-1,n)}),将有
其中R为一个上三角矩阵。因此,令
则A=QR{\displaystyle A=QR}为矩阵A{\displaystyle A}的一个QR分解。
相比与Gram-Schmidt正交化,使用Householder变换具有更好的数值稳定性。
Matlab
MATLAB以qr函数来执行QR分解法,其语法为
此外,原矩阵A不必为正方矩阵; 如果矩阵A大小为m*n,则矩阵Q大小为m*m,矩阵R大小为m*n。
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

- 有价值
- 一般般
- 没价值








24小时热门
推荐阅读

关于我们

APP下载


{{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}