大家好,欢迎来到IT知识分享网。
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 , β 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]等价。
- 单位化
则可得与 [ α 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⎦⎤
解:
- 已知 A A A的列向量为:
A A A的三个列向量无线性关系,因此 A A A为满秩矩阵,可以进行 Q R QR QR分解。 - 使用斯密特正交化方法将 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3正交化:
- 单位化:
- 整理:
- 求的 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(ω)=I−2ωω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 H−1=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 u∈Cn是一个单位向量,则对于任意 x ∈ C n x \in C^n x∈Cn,存在Householder矩阵 H H H,使得 H x = a u Hx = au Hx=au,其中 ∣ a ∣ = ∣ ∣ x ∣ ∣ 2 |a| = ||x||_2 ∣a∣=∣∣x∣∣2, a x H u ax^Hu axHu为实数。
推论1 对于任意的 x ∈ C n x \in C^n x∈Cn,存在Householder矩阵 H H H,使得 H x = a e 1 Hx = ae_1 Hx=ae1,其中 ∣ a ∣ = ∣ ∣ x ∣ ∣ 2 |a| = ||x||_2 ∣a∣=∣∣x∣∣2, a x H e 1 ax^He_1 axHe1为实数。
推论2 对于任意的 x ∈ C n x \in C^n x∈Cn,存在Householder矩阵 H = I − 2 u u T H = I – 2uu^T H=I−2uuT,( u ∈ R n , u T u = 1 u \in R^n , u^Tu=1 u∈Rn,uTu=1),使得 H x = a e 1 Hx = ae_1 Hx=ae1,其中 ∣ a ∣ = ∣ ∣ x ∣ ∣ 2 |a| = ||x||_2 ∣a∣=∣∣x∣∣2
上述结论表明,可以利用Householder变换将任意向量 x ∈ R n x \in R^n x∈Rn化为与第一自然基向量 e 1 e_1 e1平行的向量(共线)。
2.2 利用Householder矩阵求矩阵的QR分解的步骤
- 将矩阵 A A A按列分块 A = ( α 1 , α 2 , … , α n ) A = (\alpha _1,\alpha _2,\dots,\alpha _n) A=(α1,α2,…,αn),取
其中
则
- 将矩阵 B 1 ∈ C ( n − 1 ) × ( n − 1 ) B_1 \in C^{(n-1)\times(n-1)} B1∈C(n−1)×(n−1)按列分块, B 1 = ( β 1 , β 2 , … , β n ) B_1 = (\beta_1,\beta_2,\dots,\beta_n) B1=(β1,β2,…,βn)取
则
其中
依次进行下去,得到第 n − 1 n-1 n−1个 n n n阶的Householder矩阵 H n − 1 H_{n-1} Hn−1,使得
- 因为 H i H_i Hi为自逆矩阵,令 Q = H 1 H 2 … H n − 1 Q = H_1 H_2 \dots H_{n-1} Q=H1H2…Hn−1
则 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,s∈Cn, ∣ c ∣ 2 + ∣ s ∣ 2 = 1 |c|^2 + |s|^2 = 1 ∣c∣2+∣s∣2=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 x∈Cn,存在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 x∈Cn,则存在一组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 T12T13…T1nx=∣∣x∣∣2e1,因此通过Givens变换将向量 x ∈ C n x\in C^n x∈Cn与第一自然基向量 e 1 e_1 e1共线。
3.2 利用Givens矩阵求矩阵的QR分解的步骤
- 先将矩阵 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),A∈Cn×n
对于 α 1 \alpha_1 α1,存在一组Givens矩阵 T 12 , T 13 , … , T 1 n T_{12},T_{13},\dots,T_{1n} T12,T13,…,T1n,使得
于是
- 将矩阵
按列分块
又存在一组Givens矩阵$T_{23},T_{24},\dots,T_{2n}
使得
因此
依次进行 下去,得到
- 令 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=T12H…T1nHT23H…T2nHT34H…Tn−1,nH
则 A = Q R A = QR A=QR
注意: 利用Givens矩阵进行分解,需要作 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n−1)个初等旋转矩阵的连乘积,当 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
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121856.html