QR分解

  • Post author:
  • Post category:其他

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

版权声明:本文为qq_41951923原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。