• 矩阵分析与应用+张贤达


    第四章 (三)

    1.Householder QR分解

    Householder变换可以实现任意 m × n m\times n m×n矩阵 A A A的QR分解,其原理是使用变维向量的Householder变换,使得该向量除第一个元素外,其他元素皆变成0。

    根据Householder变换一节的分析,欲使一个 p p p维向量 x = [ x 1 , x 2 , … , x p ] T x=[x_1,x_2,…,x_p]^T x=[x1,x2,,xp]T的第1个元素后面的所有元索变为0,则 p p p维的Householder向量应取
    ω = x − β e 1 ( β ) ˉ ( β − x 1 ) (1) \omega=\frac{x-\beta e_1}{\sqrt{\bar{(\beta)}(\beta-x_1)}} \tag{1} ω=(β)ˉ(βx1) xβe1(1)
    式中
    ( β ) ˉ = − ∣ x 1 ∣ ∣ ∣ x ∣ ∣ , β = − x 1 ∣ x 1 ∣ ∣ ∣ x ∣ ∣ (2) \bar{(\beta)}=-|x_1|||x||, \beta=-\frac{x_1}{|x_1|}||x|| \tag{2} (β)ˉ=x1∣∣∣x∣∣,β=x1x1∣∣x∣∣(2)
    假定 m × n m\times n m×n知阵 A A A的列分块形式为
    A m × n = [ a 1 , a 2 , … , a n ] A_{m\times n}=[a_1,a_2,…,a_n] Am×n=[a1,a2,,an]
    首先令 x = a 1 = [ a 11 , a 21 , … , a m 1 ] T x=a_1=[a_{11},a_{21},…,a_{m1}]^T x=a1=[a11,a21,,am1]T,并取 p = m p=m p=m,则按照式(1)和式(2),可以计算得到 u 1 = ω m u_1=\omega_m u1=ωm。此时,
    H 1 = I − u 1 u 1 T → A 1 = H 1 A = [ a 1 ( 1 ) , a 2 ( 1 ) , … , a n ( 1 ) ) ] H_1=I-u_1u_1^T→ A_1=H_1A=[a_1^{(1)},a_2^{(1)},…,a_n^{(1)})] H1=Iu1u1TA1=H1A=[a1(1),a2(1),,an(1))]
    变换后,矩阵 A 1 A_1 A1的第1列 a 1 ( 1 ) a_1^{(1)} a1(1)的第一个元素等于 ( a 11 2 + a 21 2 + … + a m 1 2 ) 1 / 2 (a_{11}^2+a_{21}^2+…+a_{m1}^2)^{1/2} (a112+a212++am12)1/2,而该列的其他元素全部为0。
    第二步针对矩阵 A 1 A_1 A1的第2列 a 2 ( 1 ) a_2^{(1)} a2(1),令 p = m − 1 p=m-1 p=m1
    x = [ a 22 ( 1 ) , a 32 ( 1 ) , … , a m 2 ( 1 ) ] T x=[a_{22}^{(1)},a_{32}^{(1)},…,a_{m2}^{(1)}]^T x=[a22(1),a32(1),,am2(1)]T
    又可按照式(1)和式(2)求出(m-1)维向量 ω m − 1 \omega_{m-1} ωm1。 此时,取 u 2 = [ 0 ω m − 1 ] u_2=

    [0ωm1]" role="presentation" style="position: relative;">[0ωm1]
    u2=[0ωm1]又可得到
    H 2 = I − u 2 u 2 T → A 2 = H 2 A 1 = H 2 H 1 A = [ a 1 ( 1 ) , a 2 ( 1 ) , … , a n ( 1 ) ] H_2=I-u_2u_2^T → A_2 = H_2A_1 = H_2H_1A=[a_1^{(1)},a_2^{(1)},…,a_n^{(1)}] H2=Iu2u2TA2=H2A1=H2H1A=[a1(1),a2(1),,an(1)]
    变换后,矩阵 A 2 A_2 A2的第1列与 A 1 A_1 A1的第1列相同,而第2列 a 1 ( 1 ) a_1^{(1)} a1(1)的第一个元素等于 a 12 ( 1 ) a_{12}^{(1)} a12(1)第二个元素等于 [ ∣ a 22 ( 1 ) ∣ 2 + ∣ a 32 ( 1 ) ∣ 2 + … + ∣ a m 2 ( 1 ) ∣ 2 ] 1 / 2 [|a_{22}^{(1)}|^2+|a_{32}^{(1)}|^2+…+|a_{m2}^{(1)}|^2]^{1/2} [a22(1)2+a32(1)2++am2(1)2]1/2,而该列的其他元素全部为0。
    类似地,又可针对矩阵 A 2 A_2 A2的第3列设计Householder变换矩阵 H 3 H_3 H3,使得 A 2 A_2 A2的第一、二个元素保持不变,其他元素组成的 m − 2 m-2 m2维向量 x = [ a 33 ( 1 ) ∣ 2 + ∣ a 43 ( 1 ) ∣ 2 + … + ∣ a m 3 ( 1 ) ∣ 2 ] x=[a_{33}^{(1)}|^2+|a_{43}^{(1)}|^2+…+|a_{m3}^{(1)}|^2] x=[a33(1)2+a43(1)2++am3(1)2]变换为除第一个元素外的全部元素变为0。

    假定矩阵 A A A经过 k − 1 k-1 k1次Householder变换后,已变成 A ( k − 1 ) A^{(k-1)} A(k1),即
    A ( k − 1 ) = H k − 1 A ( k − 2 ) = H k − 1 … H 1 A A^{(k-1)}=H_{k-1}A^{(k-2)}=H_{k-1}…H_1A A(k1)=Hk1A(k2)=Hk1H1A
    = [ a 1 ( k − 1 ) + a 2 ( k − 1 ) + … + a n ( k − 1 ) ] , k = 2 , 3 , … =[a_{1}^{(k-1)}+a_{2}^{(k-1)}+…+a_{n}^{(k-1)}], k = 2,3,… =[a1(k1)+a2(k1)++an(k1)],k=2,3,
    并且其前 k − 1 k-1 k1列具有以下变换结果:
    a j ( k − 1 ) = [ a 1 j ( k − 1 ) , . . . , a j j ( k − 1 ) , 0 , . . . , 0 ] T , j = 1 , 2 , … , k − 1 a_j^{(k-1)}=[a_{1j}^{(k-1)},...,a_{jj}^{(k-1)},0,...,0]^T, j=1,2,…,k-1 aj(k1)=[a1j(k1),...,ajj(k1),0,...,0]Tj=1,2,,k1
    因此,第 k k k次Householder变换的目的就是保持前 k − 1 k-1 k1列不变,实现 A ( k − 1 ) A^(k-1) A(k1)的第 k k k列的下述变换:
    H ˉ k [ a k , k ( k − 1 ) a k + 1 , k ( k − 1 ) ⋮ a m , k ( k − 1 ) ] = [ a k , k ( k ) 0 ⋮ 0 ] \bar{H}_k

    [ak,k(k1)ak+1,k(k1)am,k(k1)]" role="presentation" style="position: relative;">[ak,k(k1)ak+1,k(k1)am,k(k1)]
    =
    [ak,k(k)00]" role="presentation" style="position: relative;">[ak,k(k)00]
    Hˉk ak,k(k1)ak+1,k(k1)am,k(k1) = ak,k(k)00
    这相当于对矩阵 A ( k − 1 ) A^{(k-1)} A(k1)进行Householder变换 H k A ( k − 1 ) H_kA^{(k-1)} HkA(k1)时取
    H k = [ I k − 1 0 0 H ~ k ] H_k=
    [Ik100H~k]" role="presentation" style="position: relative;">[Ik100H~k]
    Hk=[Ik100H~k]

    n n n次Householder变换后,即可实现QR分解。


    已知线性方程组
    x 1 + 2 x 2 = 5 x_1+2x_2=5 x1+2x2=5
    2 x 1 + 3 x 2 = − 2 2x_1+3x_2=-2 2x1+3x2=2
    6 x 1 + 7 x 2 = 1 6x_1+ 7x_2 = 1 6x1+7x2=1
    用Householder变换求上述方程组的最小二乘解


    记增广矩阵
    A = [ 1 2 5 2 3 − 2 6 7 1 ] A=

    [125232671]" role="presentation" style="position: relative;">[125232671]
    A= 126237521
    针对第1列 [ 1 , 2 , 6 ] T [1,2,6]^T [1,2,6]T,由式(1)和式(2)求得Householder向量 u 1 = [ 1.075 , 0.290 , 0.871 ] T u_1=[1.075,0.290,0.871]^T u1=[1.075,0.290,0.871]T。经过Householder矩阵 H 1 = I − u 1 u 1 T H_1=I-u_1u_1^T H1=Iu1u1T变换后,得
    H 1 A = [ − 6.415 − 7.826 − 23.008 0 0.592 0.875 0 0.808 1.438 ] H_1A=
    [6.4157.82623.00800.5920.87500.8081.438]" role="presentation" style="position: relative;">[6.4157.82623.00800.5920.87500.8081.438]
    H1A= 6.415007.8260.5920.80823.0080.8751.438

    针对上述矩阵的第2列,计算Householder向量 u 2 = [ 0 , 1.161 , − 0.809 ] T u_2=[0,1.161,-0.809]^T u2=[0,1.161,0.809]T。经过House holder变换 H 2 = I − u 2 u 2 T H_2=I-u_2u_2^T H2=Iu2u2T后,即得QR分解为
    H 2 H 1 A = [ − 6.415 − 7.826 − 23.008 0 − 1.105 − 1.851 0 0 − 0.160 ] H_2H_1A=
    [6.4157.82623.00801.1051.851000.160]" role="presentation" style="position: relative;">[6.4157.82623.00801.1051.851000.160]
    H2H1A= 6.415007.8261.105023.0081.8510.160

    由此得线性方程组
    − 6.415 x 1 − 7.826 x 2 = − 23.008 -6.415x_1-7.826x_2=-23.008 6.415x17.826x2=23.008
    − 1.105 x 2 = − 1.851 -1.105x_2=-1.851 1.105x2=1.851
    用回代法解之,得 x 2 = 1.675 x_2=1.675 x2=1.675 x 1 = 1.543 x_1=1.543 x1=1.543。将这两个解代入原方程,得三个方程的拟合误差分别为 e 1 = 0.107 , e 2 = 0.111 和 e 3 = 0.017 e_1=0.107,e_2=0.111和e_3=0.017 e1=0.107,e2=0.111e3=0.017

    2.带有列旋转的Householder OR分解算法

    如果矩阵 A m × n A_{m\times n} Am×n的秩小于 n n n,则上述Householder QR分解不一定能够产生正交矩阵 Q Q Q。为了解决这个问题,Golub与Van Loan提出使用带有列旋转的Householder OR分解算法。该算法计算分解
    Q T A Π = [ R 11 R 12 O O ] Q^TA\Pi=

    [R11R12OO]" role="presentation" style="position: relative;">[R11R12OO]
    QTAΠ=[R11OR12O]
    式中, Q Q Q为正交矩阵; R 11 R_{11} R11 r × r r\times r r×r上三角矩阵,且非奇异; r = r a n k ( A ) r=rank(A) r=rank(A);矩阵 Π \Pi Π为置换矩阵,矩阵乘积 A Π A\Pi AΠ表示对矩阵A的列互换(称为列旋转)。

    列旋转的原则是:在对矩阵 A A A的第 k k k列进行Householder变换之前,先比较 A A A的第 k k k列至第 n n n列中各列的范数,并把范数最大、且与第 k k k列相距最近的列记为 p i v ( k ) piv(k) piv(k),然后将第 p i v ( k ) piv(k) piv(k)列与第 k k k列相互交换位置。这相当于第 k k k次列旋转矩阵 Π \Pi Π n × n n\times n n×n单位矩阵交换第 p i v ( k ) piv(k) piv(k)和第 k k k列而成。

    算法 具有列旋转的HouseholderQR分解算法

    for j=1:n
    	c(j)=A(1:m,j)^TA(1: m,j) 
    end
    r=0;T=max{c(1),c(2),...,c(n)}
    求满足c(k)=T的最小整数k
    whilet T>0
    	r=r+1
    	piv(r)=k:A(1:m,r)A(1:m,k);c(r)c(k)
    	v(r:m)=house(A(r:m,r))
    	A(r:m,r:n)=row.house(A(r:m,r:n),v(r:m)) 
    	A(r+1:m,r)=v(r+1:m)
    	for i=r+1:n
    		c(i)=c(i)- A(r,i)^2 
    	end
    	if r<n
    		T=max{c(r+1),c(r+2),...,c(n)}
    		在k=r+1,r+2,...,n中,求满足c(k)=T的最小整数k 
    	else
    		T=0
    	end 
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    上述算法中, v = h o u s e ( x ) v=house(x) v=house(x)代表针对向量x的Householder向量函数;而 A = r o w . h o u s e ( A , v ) A= row.house(A,v) A=row.house(A,v)为Householder左乘的数,表示用Householder变换结果 P A = ( I − 2 v v T / v T v ) A PA=(I-2vv^T/v^Tv)A PA=(I2vvT/vTv)A重写矩阵 A A A

    具有列旋转的HouseholderQR分解在矩阵的奇异值分解与特征值分解中有着重要的应用。
    虽然我们分别叙述了修正Gram-Schmidt法和Householder法两种QR分解方法,但是这两种方法在数学上是等价的。除了存在 Q Q Q的第 j j j列和 R R R的第 j j j行的符号可同时反转的自由度以外,修正Gram-Schmidt法和Householder法是相同的。

  • 相关阅读:
    使用 JavaScript 和 CSS 的简单图像放大镜
    Java普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal)
    LeetCode--151
    腾讯云服务器安装宝塔面板图文教程?
    PHP生成图形验证码
    nodejs+vue毕业生就业知道信息平台系统
    [附源码]java毕业设计四六级考试管理系统
    记录微信小程序项目遇到的几个问题
    函数指针数组
    性能测试之性能监控和性能优化
  • 原文地址:https://blog.csdn.net/m0_45085885/article/details/126311017