# QR 分解 / LQ 分解
即将矩阵分解为 “正交矩阵Q × 上三角矩阵R” 的形式。其中 Q 为单位正交向量组拼起来的矩阵,R 为对角线下方(不含)全零的矩阵。
# 为什么要 QR 分解
我们经常需要解 Ax=b。如果 A 是上三角阵,相当于已经做好高斯消元了(因为上三角相当于阶梯形方程组),那么只需要从下往上回代就解完了
如果不是上三角阵,那么就需要求 x=A−1b,求逆太难了。但是我们知道正交矩阵的求逆非常简单:Q−1=QT
结合二者:如果能够分解成 A=QR,那么 QRx=b⇒Rx=QTb,只需要通过一次转置就可以转化为好解的阶梯形方程组
# 方法
将 A 按列分块,把列向量组正交化。然后把这些向量模长归一,拼在一起就是 Q。这种求 QR 分解的方法叫做 Gram-Schmidt 正交化方法。但是实际运用一般不用这个方法,涉及减法可能丢失精度。
Gram-Schmidt 标准正交化:每进来一个向量,就从这个向量中减去它在已有向量上的投影(投影长 × 单位方向向量),然后再归一化
例如 A=[α1α2α3]。首先正交化 {α1,α2,α3}
β1β2β3=α1=α2−(α2,u1)u1=α3−(α3,u1)u1−(α3,u2)u2⟹ u1u2u3=β1/∣∣β1∣∣=β2/∣∣β2∣∣=β3/∣∣β3∣∣
然后把减号项移到左边,即用 u 表示 w,写成矩阵形式自然就是 QR 分解了
A=[α1,α2,α3]=[u1,u2,u3]⎣⎢⎡∣∣β1∣∣00(α2,u1)∣∣β2∣∣0(α3,u1)(α3,u2)∣∣β3∣∣⎦⎥⎤
# 约化 QR 和完全 QR
u 不一定是 3 列的,因此 Q 也不一定是方阵,但是不影响 QTQ=I 这个事。因此所有计算都是对的,只是公式上需要把 “逆” 改成 “伪逆”。这种叫做约化 QR 分解
伪逆矩阵(Moore-Penrose 伪逆)是一个更广泛的概念,它适用于任何矩阵(包括非方阵),并且在某些情况下可以视为左逆或右逆的推广。以下是伪逆与左逆、右逆之间的关系:
伪逆矩阵 A† 满足以下四个 Penrose 条件:
- AA†A=A
- A†AA†=A†
- (AA†)T=AA†
- (A†A)T=A†A
- 当矩阵 A 是方阵且可逆时:其伪逆 A† 就是它的逆矩阵 A−1,并且此时 A−1 既是左逆也是右逆。
- 当矩阵 A 是列满秩矩阵(A 是 m×n 矩阵且秩为 n,m≥n)时:伪逆矩阵 A† 就是它的左逆 AL,满足 ALA=In。因为在这种情况下,ATA 是可逆的,伪逆矩阵可以表示为 A†=(ATA)−1AT。
- 当矩阵 A 是行满秩矩阵(A 是 m×n 矩阵且秩为 m,m≤n)时:伪逆矩阵 A† 就是它的右逆 AR,满足 AAR=Im。此时,伪逆矩阵可以表示为 A†=AT(AAT)−1。
如果仍然想要 Q 是方阵,就再多引入几个正交基补成方阵即可,这叫做完全 QR 分解
# LQ 分解
即对 AT 进行 QR 分解。L 表示下三角矩阵。假定 A 的 QR 分解为 A=QR,则 AT=RTQT。记 L=RT,这是一个下三角矩阵,也即 LQ 分解的结果表示为
AT=LQT
这里写 QT 而不写 Q,可以不用管,这些都是记号上的琐碎。QT 只是为了表示 “行向量正交化”,而以前的 Q 则表示 “列向量正交化”。
总之操作上只需要记住,LQ 分解就是 “对行向量组正交化”
# 正交投影 / 斜交投影
首先,什么是空间的正交:我们说两个空间正交,就是说在两个空间中各取一任意向量,这两个向量都是正交的。曰:若两空间正交,则各自的正交基也正交
![]()
投影的概念和之前是一样的。理解上你先假设空间是一维的,用向量当中的投影概念来理解。
我们这里考虑的空间是矩阵行空间。A/B,表示求 A 的行空间在 B 的行空间上的投影。
![]()
# 投影矩阵
例如我要将某个东西投影到 B 的行空间,我希望 “投影” 这个操作可以使用一个矩阵来表示,记为 ΠB。也即,如果我要求向量 x 在 row(B) 上的投影,只需要左乘投影矩阵即可:ΠBx
投影后的向量应当满足:
- 首先它肯定得先 ∈row(B),不然怎么叫 “在 row(B)” 上的投影呢?所以肯定是 B 每一行的线性组合,即存在某列向量 y 使得 ΠBx=BTy
- 减掉投影结果之后,剩下的东西应该垂直于投影面,这是投影 “正交性” 的内涵。即 x−ΠBx 应垂直于 row(B),也就是垂直于 B 的每一行,即 B(x−ΠBx)=0
先消 ΠB,解得 y=(BBT)−1Bx,于是 ΠBx=BTy=BT(BBT)−1Bx,也即投影矩阵
ΠB=BTy=BT(BBT)−1B
曰:投影矩阵是对称的。这很好证:外面两个 B 没变,而对于中间那个 (BBT)−1,只需要证明求逆(或伪逆)和转置可以交换:
MM−1=I T (MM−1)T(M−1)TMT(M−1)T=(=IT=I=IMT)−1
# 正交投影
以前使用投影我们得到了 “正交分解”,这里也希望做类似操作,即将空间拆成 “平行分量” 与 “垂直分量”,即
A=A/B+A/B⊥
A/B,也即 “A 的行空间投影到 B 的行空间”,只需要把它的每一行都投影过去即可。只不过投影矩阵要作用在列向量上、且返回一个列向量,因此乘投影矩阵之前要先把 A 转置一下,最后还得转回来:
A/B=(ΠBAT)T=AΠBT=AΠB=ABT(BBT)−1B
这个就是 row(A) 在 row(B) 上的分量(投影)。进一步推得,垂直方向的分量
A/B⊥=A−AΠB=A(I−ΠB)
# 使用 LQ 分解求正交投影
一个用于数值计算的方法。
我们说 “正交分解”,就是把一个向量根据 “某一给定向量” 拆成平行与垂直两部分。对应到正交投影,就是要把 row(A) somehow “组合进” row(B) 中。而正交化正是其中一种方法。
考虑 M=[BA],对它的行做正交化。这样当做完矩阵 B 的部分时,B 的正交基就出来了。接下来开始做矩阵 A 的部分,它把 A 行空间中 “平行于 B” 的部分全部抹掉了,只剩下 “垂直于 B” 的部分。
做完之后,把正交矩阵按 B 和 A 分成上下两块
M=[BA]=LQT=[L11L210L22][Q1TQ2T]
这上下两块,上面一块是 row(B) 的正交基,下面一块是 row(A) 中垂直于 row(B) (也即 B⊥)的那一部分的正交基。
单独提取 A 的部分:A=L21Q1T+L22Q2T,前一项就是 B 基线性组合,后一项就是 B⊥ 基线性组合,所以前一项就是落在 row(B) 里的 A/B,后一项就是落在 row(B)⊥ 里的 A/B⊥。也即
A/BA/B⊥=L21Q1T=L22Q2T
这种理解其实不太准确,之后 LQ 分解求斜交投影时会细说。如果要严谨,应该这样写:
[!success] 公式证明
按块提取:B=L11Q1T,A=L21Q1T+L22Q2T,故
A/B=ABT(BBT)†B=(L21Q1T+L22Q2T)Q1L11T(L11Q1TQ1L11T)†L11Q1T=(L21Q1T+L22Q2T)Q1L11T(L11L11T)†L11Q1T=(L21Q1T+L22Q2T)Q1L11T(L11T)†L11†L11Q1T=(L21Q1T+L22Q2T)Q1Q1T=(L21Q1TQ1+L22Q2TQ1)Q1T=(L21+0)Q1T=L21Q1T
这个过程实际上是:一开始保留 (BBT)†,是因为 B 不一定是方阵,没法把伪逆拆到里面去。但是,一旦写成 B=L11Q1T,一方面由 Q1 的正交性,Q1TQ1 消掉只剩下 L11;另一方面,Lii 一定是方阵。
# 斜交投影
引入第二个投影空间 row(C),构建联合投影空间。垂直分量和之前类似,即 A/[BC]⊥。平行分量 A/[BC] 进一步拆到两个投影空间上,斜杠后面是投影空间、角标是另一个投影空间。于是
A=A/CB+A/BC+A/[BC]⊥
![]()
下面考虑怎么求 A/CB。
之前是 A/B=ABT(BBT)−1B,把 B 换成 [BC]:
A/[BC]=A[BC]T([BC][BC]T)−1[BC]=A[BT,CT]([BC][BT,CT])−1[BC]
这个式子仍然可以看作是 AΠ 的形式,即投到 BC 的联合行空间上。
我们想要的 A/CB 只是 row(B) 上的分量,所以只需要取 B 那一部分的基,也就是说只需要提取前几行 B 的部分、最后 C 的部分直接去掉。因此
A/CB=(A/[BC])[I000]=A[BT,CT]([BC][BT,CT])−1[BC][I000]=A[BT,CT]([BC][BT,CT])−1[B0]
对于 A/BC,不是提取后几行。因为 C 在联合空间的下面,正交化的时候 row(C) 的基向量中平行于 row(B) 的部分都被抹掉了,因此后几行根本不是 row(C) 原来的基。正确的做法是,在构造联合空间时把 C 放在上面:
A/BC=(A/[CB])[I000]=A[CT,BT]([CB][CT,BT])−1[CB][I000]=A[CT,BT]([CB][CT,BT])−1[C0]
# 使用 LQ 分解求斜交投影
思路和正交是一样的,投影空间放上面、被投影空间放到下面,即
M=⎣⎢⎡BCA⎦⎥⎤
LQ 分解之,QT 矩阵按 B、C、A 分成上中下三块
M=⎣⎢⎡BCA⎦⎥⎤=⎣⎢⎡L11L21L310L22L3200L33⎦⎥⎤⎣⎢⎡Q1TQ2TQ3T⎦⎥⎤
从中提取 A=L31Q1T+L32Q2T+L33Q3T
这时候,不能像之前正交投影一样直接对应分解式。L33Q3T 的确对应 A/[B;C]⊥,但是不能说 L31Q1T=A/CB,也不能说 L32Q2T=A/BC,因为 B 和 C 不一定正交!见下图,注意这是平面图而非立体图,row(C) 是斜交轴
![]()
Q1T 的确是 row(B) 的基,但是 Q2T 不是 row(C) 的基,只是 row(C) 垂直于 row(B) 的部分。因此为了表达 row(C) 的基,我们从 LQ 分解中写出 C 的提取式
C=L21Q1T+L22Q2T
解得 Q2T=L22−1(C−L21Q1T),我们把这个东西往 L32Q2T 里面代:
A=L31Q1T+L32Q2T+L33Q3T=L31Q1T+L32L22−1(C−L21Q1T)+L33Q3T=(L31−L32L22−1L21)Q1T+L32L22−1C+L33Q3T
这三个基就出来了。因此
A/CBA/BCA/[BC]⊥=(L31−L32L22−1L21)Q1T=L32L22−1C=L32L22−1[L21L22][Q1TQ2T]=L33Q3T
推论(用公式或看图立即可得):
- A/AC=0
- A/CA=A