QR分解

QR分解法

QR分解法,将原矩阵 A m × n A_{m\times n} Am×n分解成一个正交矩阵 Q m × n Q_{m\times n} Qm×n( Q T Q = I Q^{T}Q = I QTQ=I)和一个上三角矩阵 R n × n R_{n\times n} Rn×n(对角线下面的元素全为0)的乘积。QR分解主要有三种方法:Gram-Schmid正交化法Household变换法、Givens变换法

1 Gram-Schmid正交化法

这种方法主要利用了斯密特正交化方法,该方法还可以通过单位正交化来构建向量空间的标准正交基。

1.1 单位正交化

已知在 n n n维空间中的任意位置都可以由该空间的 n n n个单位正交向量表示。这 n n n个单位正交向量构成了该 n n n维空间的基,即单位正交基(标准正交基)。

标准正交基的特点: 单位正交基是由单位向量构造成,,即每个向量的模长都为单位长度1,并且不同向量之间两两正交,即内积为0。

单位正交化的步骤
已知 α 1 , α 2 , … , α n \alpha _1,\alpha _2,\dots,\alpha _n α1,α2,,αn n n n个线性无关向量,如何将这 n n n个向量构成标准正交基(即单位正交化)?

  1. 施密特正交化
    在这里插入图片描述 β 1 , β 2 , … , β n \beta _1,\beta _2,\dots,\beta _n β1,β2,,βn两两正交,并且 [ β 1 , β 2 , … , β n ] [\beta _1,\beta _2,\dots,\beta _n] [β1,β2,,βn] [ α 1 , α 2 , … , α n ] [\alpha _1,\alpha _2,\dots,\alpha _n] [α1,α2,,αn]等价。
  2. 单位化
    在这里插入图片描述
    则可得与 [ α 1 , α 2 , … , α n ] [\alpha _1,\alpha _2,\dots,\alpha _n] [α1,α2,,αn]等价的单位正交基 [ γ 1 , γ 2 , … , γ n ] [\gamma _1,\gamma _2,\dots,\gamma _n] [γ1,γ2,,γn]

1.2 QR分解求特征值过程

栗子
求矩阵 A A A Q R QR QR分解
A = [ 1 2 2 1 0 2 0 1 1 ] A = \begin{bmatrix} 1&2&2\\ 1&0&2\\ 0&1&1\\ \end{bmatrix} A=110201221
解:

  1. 已知 A A A的列向量为:
    在这里插入图片描述
    A A A的三个列向量无线性关系,因此 A A A为满秩矩阵,可以进行 Q R QR QR分解。
  2. 使用斯密特正交化方法将 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3正交化:
    在这里插入图片描述
  3. 单位化:
    在这里插入图片描述
  4. 整理:
    在这里插入图片描述
  5. 求的 Q Q Q R R R
    在这里插入图片描述 A = Q R A = QR A=QR

2 利用Householder变换进行QR分解

2.1 Householder变换

Householder变换又称为反射变换或镜像变换。在 R 3 R^3 R3中,给定一个向量 α \alpha α,令 β \beta β表示 α \alpha α关于平面 π \pi π(以 ω \omega ω为法向量)的反射变换所得像

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
该变换将向量 α \alpha α变成了以 ω \omega ω为法向量的平面的对称向量。

定义 ω ∈ C n \omega \in C^n ωCn是一个单位向量,令
H ( ω ) = I − 2 ω ω H H(\omega) = I - 2\omega \omega ^H H(ω)=I2ωωH H H H为一个Householder矩阵。

Householder矩阵的性质
H H H是一个Householder矩阵,则

  • H H H是Hermite矩阵, H H = H H^H = H HH=H
  • H H H是酉矩阵, H H H = I H^H H = I HHH=I
  • H H H是对合矩阵, H 2 = I H^2 = I H2=I;
  • H H H是自逆矩阵, H − 1 = H H^{-1} = H H1=H
  • d i a g ( I , H ) diag(I,H) diag(I,H)也是一个Householder矩阵;
  • d e t ( H ) = − 1 det(H) = -1 det(H)=1

定理 u ∈ C n u \in C^n uCn是一个单位向量,则对于任意 x ∈ C n x \in C^n xCn,存在Householder矩阵 H H H,使得 H x = a u Hx = au Hx=au,其中 ∣ a ∣ = ∣ ∣ x ∣ ∣ 2 |a| = ||x||_2 a=x2 a x H u ax^Hu axHu为实数。

推论1 对于任意的 x ∈ C n x \in C^n xCn,存在Householder矩阵 H H H,使得 H x = a e 1 Hx = ae_1 Hx=ae1,其中 ∣ a ∣ = ∣ ∣ x ∣ ∣ 2 |a| = ||x||_2 a=x2 a x H e 1 ax^He_1 axHe1为实数。

推论2 对于任意的 x ∈ C n x \in C^n xCn,存在Householder矩阵 H = I − 2 u u T H = I - 2uu^T H=I2uuT,( u ∈ R n , u T u = 1 u \in R^n , u^Tu=1 uRn,uTu=1),使得 H x = a e 1 Hx = ae_1 Hx=ae1,其中 ∣ a ∣ = ∣ ∣ x ∣ ∣ 2 |a| = ||x||_2 a=x2

上述结论表明,可以利用Householder变换将任意向量 x ∈ R n x \in R^n xRn化为与第一自然基向量 e 1 e_1 e1平行的向量(共线)。

2.2 利用Householder矩阵求矩阵的QR分解的步骤

  1. 将矩阵 A A A按列分块 A = ( α 1 , α 2 , … , α n ) A = (\alpha _1,\alpha _2,\dots,\alpha _n) A=(α1,α2,,αn),取
    在这里插入图片描述
    其中
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  2. 将矩阵 B 1 ∈ C ( n − 1 ) × ( n − 1 ) B_1 \in C^{(n-1)\times(n-1)} B1C(n1)×(n1)按列分块, B 1 = ( β 1 , β 2 , … , β n ) B_1 = (\beta_1,\beta_2,\dots,\beta_n) B1=(β1,β2,,βn)
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    在这里插入图片描述
    其中
    在这里插入图片描述
    依次进行下去,得到第 n − 1 n-1 n1 n n n阶的Householder矩阵 H n − 1 H_{n-1} Hn1,使得
    在这里插入图片描述

  3. 因为 H i H_i Hi为自逆矩阵,令 Q = H 1 H 2 … H n − 1 Q = H_1 H_2 \dots H_{n-1} Q=H1H2Hn1
    A = Q R A = QR A=QR

栗子
已知矩阵
在这里插入图片描述
利用Householder变换求 A A A Q R QR QR分解。

因为
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述计算
在这里插入图片描述
β 2 \beta_2 β2等于
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
A = Q R A = QR A=QR

3 利用Givens变换进行QR分解

3.1 Givens变换

在平面坐标 R 2 R^2 R2中向量的旋转变换关系可由旋转角 θ \theta θ表示。

在这里插入图片描述其中 T T T是正交矩阵,称为平面旋转矩阵。将其推广到一般的 n n n维酉空间中,可以得到初等旋转变换,称为Givens变换。

定义 c , s ∈ C n c,s \in C^n c,sCn ∣ c ∣ 2 + ∣ s ∣ 2 = 1 |c|^2 + |s|^2 = 1 c2+s2=1,则记 n n n阶矩阵
在这里插入图片描述
T k l T_{kl} Tkl为Givens矩阵或初等旋转矩阵。
T k l T_{kl} Tkl所确定的线性变换称为Givens变换或初等旋转变换。Givens矩阵为酉矩阵,且 d e t T k l = 1 det T_{kl} = 1 detTkl=1

定理 由于任意向量 x ∈ C n x \in C^n xCn,存在Givens变换 T k l T_{kl} Tkl,使得 T k l x T_{kl}x Tklx的第 1 1 1个分量为0,第 k k k个分量为非负实数,其余分量不变。
推论给定一个向量 x ∈ C n x\in C^n xCn,则存在一组Givens矩阵 T 12 , T 13 , … , T 1 n T_{12},T_{13},\dots,T_{1n} T12,T13,,T1n,使得 T 12 T 13 … T 1 n x = ∣ ∣ x ∣ ∣ 2 e 1 T_{12}T_{13}\dots T_{1n}x = ||x||_2 e_1 T12T13T1nx=x2e1,因此通过Givens变换将向量 x ∈ C n x\in C^n xCn与第一自然基向量 e 1 e_1 e1共线。

3.2 利用Givens矩阵求矩阵的QR分解的步骤

  1. 先将矩阵 A A A按列分块, A = ( α 1 , α 2 . … , α n ) , A ∈ C n × n A = (\alpha_1,\alpha_2.\dots,\alpha_n),A\in C^{n\times n} A=(α1,α2.,αn),ACn×n
    对于 α 1 \alpha_1 α1,存在一组Givens矩阵 T 12 , T 13 , … , T 1 n T_{12},T_{13},\dots,T_{1n} T12,T13,,T1n,使得
    在这里插入图片描述
    于是
    在这里插入图片描述
  2. 将矩阵
    在这里插入图片描述
    按列分块
    在这里插入图片描述
    又存在一组Givens矩阵$T_{23},T_{24},\dots,T_{2n}
    使得
    在这里插入图片描述
    因此
    在这里插入图片描述
    依次进行 下去,得到
    在这里插入图片描述
  3. Q = T 12 H … T 1 n H T 23 H … T 2 n H T 34 H … T n − 1 , n H Q = T_{12}^{H}\dots T_{1n}^{H} T_{23}^{H}\dots T_{2n}^{H}T_{34}^{H}\dots T_{{n-1},{n}}^{H} Q=T12HT1nHT23HT2nHT34HTn1,nH
    A = Q R A = QR A=QR

注意: 利用Givens矩阵进行分解,需要作 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1)个初等旋转矩阵的连乘积,当 n n n较大时,计算量较大,因此常用镜像变换Housholder变换来进行QR分解。

代码

#include<Eigen>
#include<iostream>

int main(int argc, char** argv)
{
	Eigen::Matrix3d mat;
	mat << 0, 3, 1, 0, 4, -2, 2, 1, 1;
	std::cout << "原矩阵为:" << std::endl;
	std::cout << mat<<std::endl;
	Eigen::HouseholderQR<Eigen::Matrix3d>qr;
	qr.compute(mat);
	Eigen::Matrix3d Q, R;
	Q = qr.householderQ();
	R = qr.matrixQR().triangularView<Eigen::Upper>(); //上三角矩阵
	std::cout << "结果Q:" << std::endl;
	std::cout << Q << std::endl;
	std::cout << "结果R:" << std::endl;
	std::cout << R << std::endl;
	system("pause");
	return 0;
}

结果

原矩阵为:
 0  3  1
 0  4 -2
 2  1  1
结果Q:
   0 -0.6 -0.8
   0 -0.8  0.6
  -1    0    0
结果R:
-2 -1 -1
 0 -5  1
 0  0 -2
  • 11
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值