householder变换QR分解QR方法

householder变换

定义

  • 对于任意的模相等的非零n维向量x,y,一定可以找到一个householder矩阵使x变换到y,


    H x = y ; Hx=y; Hx=y;
    且H的定义如下:
    H = I − 2 u u T , u T u = 1 ; H=I-2uu^T,u^Tu=1; H=I2uuT,uTu=1;
    因此,容易验证H是一个正交矩阵,正交矩阵的性质是矩阵的逆等于矩阵的转置 ,多说一点,正交变换是很稳定的变换,不会改变矩阵的性质;

    证明:由于u的模为1,因此可以通过x,y构造u,


    u = ( x − y ) ∣ ∣ x − y ∣ ∣ 2 u= \frac{(x-y)}{||x-y||_2} u=xy2(xy)
    相应的可以求出H,
    H = I − 2 ( x − y ) ( x − y ) T ∣ ∣ x − y ∣ ∣ 2 2 H=I-\frac{2(x-y)(x-y)^T}{||x-y||_2^2} H=Ixy222(xy)(xy)T

    H = − ( − ) ( − ) T ‖ − ‖ x H=− \frac{(−)(−)^T}{‖−‖_^ }x Hx=xxy222(xy)(xy)Tx

    通过化简就可以得到
    H x = y ; Hx=y; Hx=y;

QR分解

  • QR分解就是把一个矩阵A分解为一个正交矩阵乘上一个三角矩阵

由householder变换的性质,可以使n维非零向量
a 1 = [ a 1 , a 2 , ⋯ , a n ] T a1=[a1,a2,\cdots,a_n]^T a1=[a1,a2,an]T
变换为
[ × , 0 , 0 , ⋯ , 0 ] T [×,0,0,\cdots,0]^T [×,0,00]T
因此可以对矩阵A按列进行分块,即
A = [ a 1 , a 2 , ⋯ , a n ] A=[a1,a2,\cdots,a_n] A=[a1,a2,an]

a i = [ a i 1 , a i 2 , ⋯ , a i n ] T a_i=[ai1,ai2,\cdots,ain]^T ai=[ai1,ai2,ain]T

首先对a1进行变换,变换为
[ × , 0 , 0 , ⋯ , 0 ] T [×,0,0,\cdots,0]^T [×,0,00]T
设householder矩阵为H1(注:“×”和H1都是可以通过计算得到,这里主要是介绍操作过程,帮助理解,计算过程就不赘述)

那么就可以得到
H 1 A = H 1 [ a 1 , a 2 , ⋯ , a n ] = ∣ × a 12 ∗ ⋯ a 1 n ∗ 0 a 22 ∗ ⋯ a 2 n ∗ ⋮ ⋮ ⋱ ⋮ 0 a n 2 ∗ ⋯ a n n ∗ ∣ H1A=H1[a1,a2,\cdots,a_n]=\left| \begin{matrix} × & a^*_{12} & \cdots & a^*_{1n}\\ 0 & a^*_{22} & \cdots & a^*_{2n}\\ \vdots & \vdots & \ddots & \vdots\\ 0& a^*_{n2} & \cdots & a^*_{nn} \\ \end{matrix} \right| H1A=H1[a1,a2,an]=×00a12a22an2a1na2nann
重复上次方法对
∣ a 22 ∗ ∗ ⋯ a 2 n ∗ ∗ ⋮ ⋱ ⋮ a n 2 ∗ ∗ ⋯ a n n ∗ ∣ \left| \begin{matrix} a^{**}_{22} & \cdots & a^{**}_{2n}\\ \vdots & \ddots & \vdots\\ a^{**}_{n2} & \cdots & a^*_{nn} \\ \end{matrix} \right| a22an2a2nann
的第一列进行变换,设householder矩阵为H2*(注以下计算用到了分块的方法,分成四块)

就可以得到
∣ 1 0 0 H 2 ∗ ∣ H 1 A = H 2 H 1 [ a 1 , a 2 , ⋯ , a n ] = ∣ × × a 13 ∗ ∗ ⋯ a 1 n ∗ ∗ 0 × a 23 ∗ ∗ ⋯ a 2 n ∗ ∗ 0 0 a 33 ∗ ∗ ⋯ a 3 n ∗ ∗ ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 a n 3 ∗ ∗ ⋯ a n n ∗ ∗ ∣ \left| \begin{matrix} 1 & 0\\ 0& H2^* \\ \end{matrix} \right|H1A=H2H1[a1,a2,\cdots,a_n]=\left| \begin{matrix} × & × & a^{**}_{13}&\cdots & a^{**}_{1n}\\ 0 & ×& a^{**}_{23}&\cdots & a^{**}_{2n}\\ 0 & 0&a^{**}_{33}& \cdots & a^{**}_{3n}\\ \vdots & \vdots & \vdots & \ddots&\vdots\\ 0& 0&a^{**}_{n3}& \cdots & a^{**}_{nn} \\ \end{matrix} \right| 100H2H1A=H2H1[a1,a2,an]=×000××00a13a23a33an3a1na2na3nann
重复上面的步骤,做n-1次变换后,就可以得到一个上三角矩阵
H n − 1 H n − 2 ⋯   H 1 A = ∣ × × × ⋯ × 0 × × ⋯ × 0 0 × ⋯ × ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ × ∣ H_{n-1}H_{n-2}\cdots\ H1A=\left| \begin{matrix} × & × & ×&\cdots & ×\\ 0 & ×& ×&\cdots & ×\\ 0 & 0&×& \cdots & ×\\ \vdots & \vdots & \vdots & \ddots&\vdots\\ 0& 0&0& \cdots & ×\\ \end{matrix} \right| Hn1Hn2 H1A=×000××00×××0××××
由于H是正交矩阵,因此多个正交矩阵相乘依然是正交矩阵,并且正交矩阵的逆等于矩阵的转置,所以可以得到
A = Q R A=QR A=QR
Q为正交矩阵,R为上三角矩阵

QR分解

  • QR方法是反复对矩阵进行QR分解迭代求特征值的方法

记A为A1,对A1进行QR分解: A1=Q1 R1,然后将矩阵Q1、 R1逆序相乘,得A2=R1 Q1;再以A2重复上述步骤得到A_3,如此类推,

A K + 1 = Q K R K = Q K − 1 A K Q K = ⋯   = Q K − 1 Q K − 1 − 1 ⋯   Q 1 − 1 A 1 Q 1 Q 2 ⋯   Q K A_{K+1}=Q_{K}R_{K}={Q_{K}}^{-1}A_{K}Q_{K}=\cdots\ = {Q_{K}}^{-1}{Q_{K-1}}^{-1}\cdots\ Q_{1}^{-1} A_{1}Q_{1}Q_{2}\cdots\ Q_{K} AK+1=QKRK=QK1AKQK= =QK1QK11 Q11A1Q1Q2 QK
因此A1与A_k+1相似,特征值相等;从矩阵A开始迭代得到一个矩阵序列{ A1,A2,……Ak},这个矩阵序列中的每个矩阵都与原矩阵A相似,即都有与A相同的特征值。

  • 显然,为了求得A的特征值,只需序列能趋向于分块三角矩阵(对角线上的块为一阶或二阶方阵)即可,从而可求出A 的特征值。

你可能感兴趣的:(线性代数,矩阵,算法)