对于一个矩阵,如果它的列向量之间线性无关,那么它就可以分解成
A
=
Q
⋅
R
A = Q \cdot R
A=Q⋅R。
Q
Q
Q是一个标准正交矩阵
R
R
R是一个上三角形式的矩阵
矩阵
A
A
A的
A
=
Q
⋅
R
A = Q \cdot R
A=Q⋅R这种形式的分解称为
Q
R
分解
QR分解
QR分解。
获取一个列向量之间线性无关的矩阵 A A A的标准正交矩阵 Q Q Q,实际上就是对矩阵 A A A的列向量执行Gram-Schmidt过程,因为矩阵 A A A的列向量之间线性无关,所以可以把它们当成空间的一组基来处理。
QR分解实际上是Gram-Schmidt过程的逆过程:
Gram-Schmidt过程是给定空间的一组基求取空间的正交基的过程:
如果已知一组基: v ⃗ 1 , v ⃗ 2 , ⋯ , v ⃗ n \vec v_1 , \vec v_2 , \cdots , \vec v_n v1,v2,⋯,vn,相应的求出这组基所代表的 n n n维空间的一组正交基的过程就是:
p ⃗ 1 = v ⃗ 1 \vec p_1 = \vec v_1 p1=v1
p ⃗ 2 = v ⃗ 2 − p ⃗ 1 ⋅ v ⃗ 2 ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 \vec p_2 = \vec v_2 - \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot {\vec p_1} p2=v2−∥p1∥p1⋅v2⋅p1
p ⃗ 3 = v ⃗ 3 − p ⃗ 1 ⋅ v ⃗ 3 ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 − p ⃗ 2 ⋅ v ⃗ 3 ∥ p ⃗ 2 ∥ ⋅ p ⃗ 2 \vec p_3 = \vec v_3 - \frac {\vec p_1 \cdot \vec v_3}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_3}{\|{\vec p_2}\|} \cdot {\vec p_2} p3=v3−∥p1∥p1⋅v3⋅p1−∥p2∥p2⋅v3⋅p2
p ⃗ 4 = v ⃗ 4 − p ⃗ 1 ⋅ v ⃗ 4 ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 − p ⃗ 2 ⋅ v ⃗ 4 ∥ p ⃗ 2 ∥ ⋅ p ⃗ 2 − p ⃗ 3 ⋅ v ⃗ 4 ∥ p ⃗ 3 ∥ ⋅ p ⃗ 3 \vec p_4 = \vec v_4 - \frac {\vec p_1 \cdot \vec v_4}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_4}{\|{\vec p_2}\|} \cdot {\vec p_2} - \frac {\vec p_3 \cdot \vec v_4}{\|{\vec p_3}\|} \cdot {\vec p_3} p4=v4−∥p1∥p1⋅v4⋅p1−∥p2∥p2⋅v4⋅p2−∥p3∥p3⋅v4⋅p3
…
p ⃗ n = v ⃗ n − p ⃗ 1 ⋅ v ⃗ n ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 − p ⃗ 2 ⋅ v ⃗ n ∥ p ⃗ 2 ∥ ⋅ p ⃗ 2 − p ⃗ 3 ⋅ v ⃗ n ∥ p ⃗ 3 ∥ ⋅ p ⃗ 3 − ⋯ − p ⃗ n − 1 ⋅ v ⃗ n ∥ p ⃗ n − 1 ∥ ⋅ p ⃗ n − 1 \vec p_n = \vec v_n - \frac {\vec p_1 \cdot \vec v_n}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_n}{\|{\vec p_2}\|} \cdot {\vec p_2} - \frac {\vec p_3 \cdot \vec v_n}{\|{\vec p_3}\|} \cdot {\vec p_3} - \cdots - \frac {\vec p_{n-1} \cdot \vec v_n}{\|{\vec p_{n-1}}\|} \cdot {\vec p_{n-1}} pn=vn−∥p1∥p1⋅vn⋅p1−∥p2∥p2⋅vn⋅p2−∥p3∥p3⋅vn⋅p3−⋯−∥pn−1∥pn−1⋅vn⋅pn−1
对于矩阵
A
A
A通过Gram-Schmidt过程,就可以将列向量
v
⃗
1
,
v
⃗
2
,
⋯
,
v
⃗
n
\vec v_1 , \vec v_2 , \cdots , \vec v_n
v1,v2,⋯,vn处理成一组正交向量组
p
⃗
1
,
p
⃗
2
,
⋯
,
p
⃗
n
\vec p_1 , \vec p_2 , \cdots , \vec p_n
p1,p2,⋯,pn;
继续将正交向量组的向量进行规范化
u
^
=
u
⃗
∥
u
⃗
∥
\hat u = \frac {\vec u}{\|\vec u\|}
u^=∥u∥u处理,最后就得到了矩阵的列向量的标准正交向量组
q
⃗
1
,
q
⃗
2
,
⋯
,
q
⃗
n
\vec q_1 , \vec q_2 , \cdots , \vec q_n
q1,q2,⋯,qn
将这组标准正交向量组按列向量的方式排列就得到了标准正交矩阵
Q
=
(
∣
∣
∣
⋯
∣
q
⃗
1
,
q
⃗
2
,
q
⃗
3
,
⋯
,
q
⃗
n
∣
∣
∣
⋯
∣
)
Q= \left (\begin{array}{c}\ | \ \ \ \ |\ \ \ \ |\ \ \ \ \cdots \ \ \ | \\ \vec q_1,\vec q_2,\vec q_3,\cdots ,\vec q_n \\ \ | \ \ \ \ |\ \ \ \ |\ \ \ \ \cdots \ \ \ |\end{array} \right )
Q=
∣ ∣ ∣ ⋯ ∣q1,q2,q3,⋯,qn ∣ ∣ ∣ ⋯ ∣
从Gram-Schmidt的逆过程推导矩阵的QR分解
在整个Gram-Schmidt过程中,每一步获取一个正交向量 p ⃗ i \vec p_i pi的时候, p ⃗ i \vec p_i pi可以和最后得到的 q ⃗ i \vec q_i qi存在联系 p ⃗ i = ∥ p ⃗ i ∥ ⋅ q ⃗ i \vec p_i = \|\vec p_i\| \cdot \vec q_i pi=∥pi∥⋅qi,进而矩阵 A A A中原先的每个列向量 v ⃗ i \vec v_i vi就可以和 q ⃗ i \vec q_i qi建立联系:
A = Q R A = Q R A=QR
p ⃗ 1 = v ⃗ 1 = ∥ p ⃗ 1 ∥ ⋅ q ⃗ 1 = r 11 ⋅ q ⃗ 1 \vec p_1 = \vec v_1 = \|\vec p_1\| \cdot \vec q_1 = r_{11} \cdot \vec q_1 p1=v1=∥p1∥⋅q1=r11⋅q1 ,其中 ∥ p ⃗ 1 ∥ \|\vec p_1\| ∥p1∥本身是个标量,这里就用 r 11 r_{11} r11代替;
∴ v ⃗ 1 = r 11 ⋅ q ⃗ 1 \therefore \vec v_1 = r_{11} \cdot \vec q_1 ∴v1=r11⋅q1 ← \leftarrow ←
p ⃗ 2 = v ⃗ 2 − p ⃗ 1 ⋅ v ⃗ 2 ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 = ∥ p ⃗ 2 ∥ ⋅ q ⃗ 2 \vec p_2 = \vec v_2 - \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot {\vec p_1}= \|\vec p_2\| \cdot \vec q_2 p2=v2−∥p1∥p1⋅v2⋅p1=∥p2∥⋅q2
∴ v ⃗ 2 = ∥ p ⃗ 2 ∥ ⋅ q ⃗ 2 + p ⃗ 1 ⋅ v ⃗ 2 ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 \therefore \vec v_2 = \|\vec p_2\| \cdot \vec q_2 + \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot {\vec p_1} ∴v2=∥p2∥⋅q2+∥p1∥p1⋅v2⋅p1,这里 p ⃗ 1 \vec p_1 p1用$ |\vec p_1| \cdot \vec q_1 $代入得下式
∴ v ⃗ 2 = ∥ p ⃗ 2 ∥ ⋅ q ⃗ 2 + p ⃗ 1 ⋅ v ⃗ 2 ∥ p ⃗ 1 ∥ ⋅ ∥ p ⃗ 1 ∥ ⋅ q ⃗ 1 \therefore \vec v_2 = \|\vec p_2\| \cdot \vec q_2 + \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot { \|\vec p_1\| \cdot \vec q_1} ∴v2=∥p2∥⋅q2+∥p1∥p1⋅v2⋅∥p1∥⋅q1
∴ v ⃗ 2 = r 21 q ⃗ 1 + r 22 q ⃗ 2 \therefore \vec v_2 =r_{21} \vec q_1 + r_{22} \vec q_2 ∴v2=r21q1+r22q2,上式的 ∥ p ⃗ 2 ∥ \| \vec p_2 \| ∥p2∥ 和 p ⃗ 1 ⋅ v ⃗ 2 ∥ p ⃗ 1 ∥ ⋅ ∥ p ⃗ 1 ∥ \frac {\vec p_1 \cdot \vec v_2}{\|{\vec p_1}\|} \cdot { \|\vec p_1\|} ∥p1∥p1⋅v2⋅∥p1∥ 都是标量,用 r 22 , r 21 r_{22},r_{21} r22,r21 代替,简化表示出 v ⃗ 2 \vec v_2 v2与 q ⃗ 1 , q ⃗ 2 \vec q_1,\vec q_2 q1,q2的关系; ← \leftarrow ←
p ⃗ 3 = v ⃗ 3 − p ⃗ 1 ⋅ v ⃗ 3 ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 − p ⃗ 2 ⋅ v ⃗ 3 ∥ p ⃗ 2 ∥ ⋅ p ⃗ 2 = ∥ p ⃗ 3 ∥ ⋅ q ⃗ 3 \vec p_3 = \vec v_3 - \frac {\vec p_1 \cdot \vec v_3}{\|{\vec p_1}\|} \cdot {\vec p_1} - \frac {\vec p_2 \cdot \vec v_3}{\|{\vec p_2}\|} \cdot {\vec p_2} = \|\vec p_3\| \cdot \vec q_3 p3=v3−∥p1∥p1⋅v3⋅p1−∥p2∥p2⋅v3⋅p2=∥p3∥⋅q3
∴ v ⃗ 3 = ∥ p ⃗ 3 ∥ ⋅ q ⃗ 3 + p ⃗ 2 ⋅ v ⃗ 3 ∥ p ⃗ 2 ∥ ⋅ p ⃗ 2 + p ⃗ 1 ⋅ v ⃗ 3 ∥ p ⃗ 1 ∥ ⋅ p ⃗ 1 \therefore \vec v_3 = \|\vec p_3\| \cdot \vec q_3 + \frac {\vec p_2 \cdot \vec v_3}{\|{\vec p_2}\|} \cdot {\vec p_2} + \frac {\vec p_1 \cdot \vec v_3}{\|{\vec p_1}\|} \cdot {\vec p_1} ∴v3=∥p3∥⋅q3+∥p2∥p2⋅v3⋅p2+∥p1∥p1⋅v3⋅p1
∴ v ⃗ 3 = r 31 ⋅ q ⃗ 1 + r 32 ⋅ q ⃗ 2 + r 33 ⋅ q ⃗ 3 \therefore \vec v_3 = r_{31}\cdot \vec q_1 + r_{32} \cdot \vec q_2 + r_{33} \cdot \vec q_3 ∴v3=r31⋅q1+r32⋅q2+r33⋅q3 ← \leftarrow ←
⋯ \cdots ⋯
持续执行上过程,就能反推得到矩阵 A A A中原先的每个列向量 v ⃗ i \vec v_i vi和 q ⃗ i \vec q_i qi的关系:
v ⃗ 1 = r 11 ⋅ q ⃗ 1 \vec v_1 = r_{11} \cdot \vec q_1 v1=r11⋅q1
v ⃗ 2 = r 21 q ⃗ 1 + r 22 q ⃗ 2 \vec v_2 = r_{21} \vec q_1 + r_{22} \vec q_2 v2=r21q1+r22q2
v ⃗ 3 = r 31 ⋅ q ⃗ 1 + r 32 ⋅ q ⃗ 2 + r 33 ⋅ q ⃗ 3 \vec v_3 = r_{31}\cdot \vec q_1 + r_{32} \cdot \vec q_2 + r_{33} \cdot \vec q_3 v3=r31⋅q1+r32⋅q2+r33⋅q3
v ⃗ 4 = r 41 ⋅ q ⃗ 1 + r 42 ⋅ q ⃗ 2 + r 43 ⋅ q ⃗ 3 + r 44 ⋅ q ⃗ 4 \vec v_4 = r_{41}\cdot \vec q_1 + r_{42} \cdot \vec q_2 + r_{43} \cdot \vec q_3 + r_{44} \cdot \vec q_4 v4=r41⋅q1+r42⋅q2+r43⋅q3+r44⋅q4
$\cdots $
v ⃗ n = r n 1 ⋅ q ⃗ 1 + r n 2 ⋅ q ⃗ 2 + r n 3 ⋅ q ⃗ 3 + ⋯ + r n n ⋅ q ⃗ n \vec v_n = r_{n1}\cdot \vec q_1 + r_{n2} \cdot \vec q_2 + r_{n3} \cdot \vec q_3 +\cdots + r_{nn} \cdot \vec q_n vn=rn1⋅q1+rn2⋅q2+rn3⋅q3+⋯+rnn⋅qn从而,对于矩阵 A A A的一组列向量 v ⃗ 1 , v ⃗ 2 , ⋯ , v ⃗ n \vec v_1 , \vec v_2 , \cdots , \vec v_n v1,v2,⋯,vn,就可以由 r i j , q ⃗ i r_{ij} , \vec q_i rij,qi进行表示,重新排列成矩阵:
A = ( r 11 ⋅ q ⃗ 1 , r 21 q ⃗ 1 + r 22 q ⃗ 2 , ⋯ , r n 1 ⋅ q ⃗ 1 + r n 2 ⋅ q ⃗ 2 + r n 3 ⋅ q ⃗ 3 + ⋯ + r n n ⋅ q ⃗ n ) A= \left (\begin{array}{c} \ \ r_{11} \cdot \vec q_1 ,\ \ r_{21} \vec q_1 + r_{22} \vec q_2 ,\ \cdots \ , r_{n1}\cdot \vec q_1 + r_{n2} \cdot \vec q_2 + r_{n3} \cdot \vec q_3 +\cdots + r_{nn} \cdot \vec q_n \end{array} \right ) A=( r11⋅q1, r21q1+r22q2, ⋯ ,rn1⋅q1+rn2⋅q2+rn3⋅q3+⋯+rnn⋅qn)这个新组成的矩阵A,提出其中的 q ⃗ i \vec q_i qi向量,进而就表示成矩阵的 Q R QR QR分解形式:
A = ( q ⃗ 1 , q ⃗ 2 , ⋯ , q ⃗ n ) ⋅ [ r 11 r 21 r 31 ⋯ r n 1 0 r 22 r 32 ⋯ r n 2 0 0 r 33 ⋯ r n 3 0 0 0 ⋯ r n n ] = Q ⋅ R A= \left (\begin{array}{c} \vec q_1 \ \ \ , \vec q_2\ \ \ ,\cdots , \vec q_n \end{array} \right ) \cdot \begin{bmatrix} r_{11}&r_{21}&r_{31}&\cdots&r_{n1} \\ 0&r_{22}&r_{32}&\cdots&r_{n2} \\ 0&0&r_{33}&\cdots&r_{n3} \\ 0&0&0&\cdots&r_{nn} \end{bmatrix} = Q \cdot R A=(q1 ,q2 ,⋯,qn)⋅ r11000r21r2200r31r32r330⋯⋯⋯⋯rn1rn2rn3rnn =Q⋅R
Q = ( q ⃗ 1 , q ⃗ 2 , ⋯ , q ⃗ n ) Q = \left (\begin{array} {c} \vec q_1 \ \ \ , \vec q_2\ \ \ ,\cdots , \vec q_n \end{array} \right ) Q=(q1 ,q2 ,⋯,qn)R = [ r 11 r 21 r 31 ⋯ r n 1 0 r 22 r 32 ⋯ r n 2 0 0 r 33 ⋯ r n 3 0 0 0 ⋯ r n n ] R = \begin{bmatrix} r_{11}&r_{21}&r_{31}&\cdots&r_{n1} \\ 0&r_{22}&r_{32}&\cdots&r_{n2} \\ 0&0&r_{33}&\cdots&r_{n3} \\ 0&0&0&\cdots&r_{nn} \end{bmatrix} R= r11000r21r2200r31r32r330⋯⋯⋯⋯rn1rn2rn3rnn
获取矩阵的 Q Q Q矩阵和 R R R矩阵
通过上面的推导过程可知Gram-Schmidt过程得到了矩阵
A
A
A的Q矩阵,再逆推导就能得到R矩阵。
但是对于一个列向量之间线性无关的矩阵
A
A
A,它能够进行QR分解,其实就有:
A
=
Q
R
=
Q
−
1
⋅
A
=
Q
−
1
Q
⋅
R
=
R
A = QR = Q^{-1} \cdot A = Q^{-1} Q \cdot R = R
A=QR=Q−1⋅A=Q−1Q⋅R=R
又
∵
Q
T
⋅
Q
=
I
→
Q
1
=
Q
T
\because Q^T \cdot Q= I \to Q^{1} = Q^{T}
∵QT⋅Q=I→Q1=QT,Q是标准正交矩阵,所以根本不需要通过计算来求矩阵Q的逆
R
=
Q
−
1
A
=
Q
T
⋅
A
R = Q^{-1} A = Q^{T} \cdot A
R=Q−1A=QT⋅A
所以QR分解一个矩阵 A A A,其实只需要进行一边正向Gram-Schmidt过程求出矩阵 A A A的列向量的标准正交向量组;
QR分解的应用
主要还是用于加速线性系统的求解
对于 A x = b Ax=b Ax=b, A = Q R A=QR A=QR,
( Q R ) x = b (QR)x = b (QR)x=b
Q − 1 ( Q R ) x = Q − 1 b Q^{-1}(QR)x = Q^{-1}b Q−1(QR)x=Q−1b
R x = Q T b Rx = Q^{T}b Rx=QTb求解过程中,只需要求解出矩阵A的Q矩阵,同时R矩阵又是一个上三角矩阵,从而降低了求解的时间复杂度。