Householder變換


整理自:《數值線性代數(徐樹方)》

Householder變換是一種能將n維向量x變換到任一n維向量y的正交變換,由於從幾何上看Householder變換通過xy之間的垂直平分面將x“反射”到y,因此Householder變換又叫鏡面變換;

Householder的主要應用在於它能夠將x變換成任意一個等長的若干個分量為0的向量(這種向量具有某些良好的性質,尤其是在最小二乘法的正交化解法的應用),只需要對變換后的向量再進行一次Householder變換,就能變回x

本篇先介紹Householder變換的定義及其性質,再推導一種用於求Householder變換的數值化方法

 

一、Householder變換及其性質

    定義:

    Householder變換:設ω∈Rn, ||ω||2=1,定義:

                   H=I-2ωωT(H∈Rn×n)                                                                          公式1

    稱H為Householder變換(矩陣)

    性質:

    1.對稱性:HT=H

    2.正交性:HTH=I

    3.對合性:HH=I

    4.反射性:對任意x∈Rn,Hxx關於ω的垂直超平面(即span{ω})的鏡面反射。

                                                            

    性質1,2,3不難證,這里僅證性質4:

    設x∈Rn,則可以將x表示為x=uω,其中u∈span{ω}(即ω的正交補空間),α∈Rn,即有:Hx=H(uω)=(I-2ωωT)u+(I-2ωωTω=uω,得證。

    從以上證明過程可以看出,H將x沿ω的分量映射到超平面的反方向,而沒有改變垂直ω(即沿超平面方向)的分量方向,因此導致x經過H變換以后變為了關於ω的垂直超平面的鏡面反射,實際上,以上證明的本質可以概括為H的以下兩個性質,即:Hu=u,Hω=-ω。

    (由於Householder變換的反射性,Householder變換又被稱為初等反射矩陣或鏡像變換)

    定理1:

            給定任何兩個向量xy(x,y∈Rn且||x||2=||y||2),都可以找到一個Householder變換H,使得y=Hx

    采用構造性的方法證明:令ω=(x-y)/||x-y||2,H=I-2ωωT,即有y=Hx,得證。

    由定理1自然得到定理2

    定理2

           設0≠x∈Rn, 則可構造單位向量ω∈Rn,使得由公式1定義的Householder變換H滿足Hxe1,其中α=±||x||2

 

二、Householder算法

    正如定理2顯示的那樣,Householder變換的主要用途在於,它能和Guass變換一樣,通過選取指定的單位向量,把一個給定向量的若干個分量置為0,Householder算法就是用來尋找滿足定理2的H,即對任意一個0≠x∈Rn,找到一個H滿足Hxe1。雖然ω和H的求法定理1已揭示出,但是Householder算法從數值計算的角度,考慮到計算誤差和時間、空間復雜度的問題,對求解過程做了一定的修改,使得求解算法更加高效准確。

    接下來我們推導求解將x變為||x||2e1的Householder變換的算法:

    首先,從定理1定理2可推出,ωH的基本構造方法:

    (1) 計算v=x±||x||2e1     

    (2)計算ω=v/||v||2

    (3)計算H=I-2ωωT

    以上方法從數學的角度非常美觀,但是從計算機的角度,存在着計算誤差以及時間、空間復雜度的問題,下面就對其缺點以及解決方法作一定的分析,在最后貼出解決了這些問題的最終版算法。

    在步驟(1)中,通常選取v=x-||x||2e1,但這樣在計算時可能會遇到一個問題:如果x1為正 向量且和||x||2大小上比較接近,計算x1-||x||2時,會嚴重地損失有效數字,甚至造成下溢。解決地方法就是對該式做一定的等價變形,即:

                   v1=x1-||x||2=(x12-||x||22)/(x1+||x||2)=-(x22+x32+...+xn2)/(x1+||x||2)       公式2

    (只有在x1為正時才需要做這種變換,當x1為負時x1-||x||2不存在精度損失的問題)

     在步驟(2)中,需要計算||v||2,其中包含開方運算,開方運算的效率較低,要盡量避免,將(2)式直接代入(3)式,恰好可以直接避免開方運算:

                  H=I-2ωωT=I-2vvT/vTv                                                                       公式3

     整理公式3,令β=2/vTv,即:

                  H=I-βvvT                                                                                           公式4

    此外,為了避免x2過大造成的上溢出問題,我們在步驟(1)之前令x=x/||x||,利用規格化后的x來求β和v,這樣相當於在原來的v之前乘了1/||x||,注意,這樣做對最終的H沒有影響,因為1/||x||v與v的單位化向量相同,即vvT/vTv 不變。

    此外,我們可以在步驟(3)之后,令v=v/v1,這樣做可以使v1=1,v的后n-1個分量正好存在x的后n-1個為0的向量之中(v1=1不需保存),但是注意要將β做相應調整。

    綜合以上改進,最終的算法為:

                                            

    最后補充兩點:

    利用Householder變換在一個向量中引入零元素,並不局限於Hxe1的形式,例如,我們需要將x的第k+1至j個元素置為0,那么可以構造y=(x1,  x2, ...xk-1, α, 0, 0...0 ,xj+1,...xn),(a=Σji=kxi2)注意到||x||2=||y||2

再構造v=x-yv=(0,...0,xk-a,xk+1,...xj,0,...0)即可。

    注意到算法1中,並沒有直接求出H,而是給出了β和v,這樣做的原因使求vvT的成本太大,實際上,不需要求出H,而利用H=I-βvvT來進行變換更有效率,例如對矩陣A做Householder變換,可以通過以下公式進行:

                  HA=(I-βvvT )A=A-βv(ATv)2=A-vw                                                      公式5

    其中w=βATv,總的運算量為4mn

  

 

 

 

 

 

 

 

 

 

 

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM