QR分解是将矩阵分解成一个正规正交矩阵Q与上三角形矩阵R,所以称为QR分解法。该算法对对称矩阵和非对称矩阵都适用。
定义:
一个矩阵
A
∈
R
m
×
n
,
m
≥
n
A \in \mathbb{R}^{m \times n}, m \geq n
A∈Rm×n,m≥n 可以被分解成
A
=
Q
R
A=Q R
A=QR, 其中
- Q ∈ R m × m Q \in \mathbb{R}^{m \times m} Q∈Rm×m 是正交矩阵
- R ≡ [ R ^ 0 ] ∈ R m × n R \equiv\left[\begin{array}{l}\hat{R} \\ 0\end{array}\right] \in \mathbb{R}^{m \times n} R≡[R^0]∈Rm×n
- R ^ ∈ R n × n \hat{R} \in \mathbb{R}^{n \times n} R^∈Rn×n 是上三角矩阵
下面给出一个直观的QR分解的例子
从QR分解角度看线性最小二乘
对于一个over-determined线性最小二乘问题
A
x
≃
b
A x \simeq b
Ax≃b,,其目标函数是
ϕ
(
x
)
=
∥
r
(
x
)
∥
2
2
=
∥
b
−
A
x
∥
2
2
=
∥
b
−
Q
[
R
^
0
]
x
∥
2
2
=
∥
Q
T
(
b
−
Q
[
R
^
0
]
x
)
∥
2
2
=
∥
Q
T
b
−
[
R
^
0
]
x
∥
2
2
\begin{aligned} \phi(x)=\|r(x)\|_{2}^{2} &=\|b-A x\|_{2}^{2}=\left\|b-Q\left[\begin{array}{l}\hat{R} \\ 0\end{array}\right] x\right\|_{2}^{2} \\ &=\left\|Q^{T}\left(b-Q\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right] x\right)\right\|_{2}^{2} \\ &=\left\|Q^{T} b-\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right] x\right\|_{2}^{2} \end{aligned}
ϕ(x)=∥r(x)∥22=∥b−Ax∥22=∥∥∥∥b−Q[R^0]x∥∥∥∥22=∥∥∥∥QT(b−Q[R^0]x)∥∥∥∥22=∥∥∥∥QTb−[R^0]x∥∥∥∥22
这里 Q ∈ R m × m , Q b ∈ R m × 1 , [ R ^ 0 ] ∈ R m × n , [ R ^ 0 ] x ∈ R m × 1 Q \in \mathbb{R}^{m \times m}, \quad Q b \in \mathbb{R}^{m \times 1},\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right] \in \mathbb{R}^{m \times n},\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right] x \in \mathbb{R}^{m \times 1} Q∈Rm×m,Qb∈Rm×1,[R^0]∈Rm×n,[R^0]x∈Rm×1
如果把
Q
T
b
Q^{T} b
QTb 拆分成上下两部分,形式
[
R
^
0
]
\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right]
[R^0]类似,
Q
T
b
=
[
c
1
c
2
]
Q^{T} b=\left[\begin{array}{l}c_{1} \\ c_{2}\end{array}\right]
QTb=[c1c2], where
c
1
∈
R
n
,
c
2
∈
R
m
−
n
c_{1} \in \mathbb{R}^{n}, c_{2} \in \mathbb{R}^{m-n}
c1∈Rn,c2∈Rm−n。那么目标函数可以写成下面的形式:
∥ r ( x ) ∥ 2 2 = ∥ c 1 − R ^ x ∥ 2 2 + ∥ c 2 ∥ 2 2 \|r(x)\|_{2}^{2}=\left\|c_{1}-\hat{R} x\right\|_{2}^{2}+\left\|c_{2}\right\|_{2}^{2} ∥r(x)∥22=∥∥∥c1−R^x∥∥∥22+∥c2∥22
可以看到,我们只能最小化前一部分 ∥ c 1 − R ^ x ∥ 2 2 \left\|c_{1}-\hat{R} x\right\|_{2}^{2} ∥∥∥c1−R^x∥∥∥22 到0,即 R ^ x = c 1 \hat{R} x=c_{1} R^x=c1, ∥ r ( x ) ∥ 2 2 \|r(x)\|_{2}^{2} ∥r(x)∥22 的最小值为 ∥ c 2 ∥ 2 2 \left\|c_{2}\right\|_{2}^{2} ∥c2∥22 。这样处理之后就避免了求正规方程组中的 ( A T A ) − 1 \left(A^{T} A\right)^{-1} (ATA)−1 ,避免了条件数变成 cond ( A T A ) = cond ( A ) 2 \operatorname{cond}\left(A^{T} A\right)=\operatorname{cond}(A)^{2} cond(ATA)=cond(A)2,所以QR分解法更加数值稳定。