# QR 分解 / LQ 分解

即将矩阵分解为 “正交矩阵QQ ×\times 上三角矩阵RR” 的形式。其中 QQ单位正交向量组拼起来的矩阵,RR对角线下方(不含)全零的矩阵。

# 为什么要 QR 分解

我们经常需要解 Ax=bA\vec x=\vec b。如果 AA 是上三角阵,相当于已经做好高斯消元了(因为上三角相当于阶梯形方程组),那么只需要从下往上回代就解完了

如果不是上三角阵,那么就需要求 x=A1b\vec x=A^{-1}\vec b,求逆太难了。但是我们知道正交矩阵的求逆非常简单:Q1=QTQ^{-1}=Q^{\rm T}{}

结合二者:如果能够分解成 A=QRA=QR,那么 QRx=bRx=QTbQR\,\vec x=\vec b\Rightarrow R\vec x=Q^{\rm T}\,\vec b,只需要通过一次转置就可以转化为好解的阶梯形方程组

# 方法

AA 按列分块,把列向量组正交化。然后把这些向量模长归一,拼在一起就是 QQ。这种求 QR 分解的方法叫做 Gram-Schmidt 正交化方法。但是实际运用一般不用这个方法,涉及减法可能丢失精度。

Gram-Schmidt 标准正交化:每进来一个向量,就从这个向量中减去它在已有向量上的投影(投影长 ×\times 单位方向向量),然后再归一化
例如 A=[α1α2α3]A=\begin{bmatrix}\alpha_1&\alpha_2&\alpha_3\end{bmatrix}。首先正交化 {α1,α2,α3}\lbrace\alpha_1,\alpha_2,\alpha_3\rbrace

β1=α1β2=α2(α2,u1)u1β3=α3(α3,u1)u1(α3,u2)u2u1=β1/β1u2=β2/β2u3=β3/β3\begin{aligned} \beta_1 &= \alpha_1\\ \beta_2 &= \alpha_{2}-{(\alpha_2,u_1)}u_{1}\\ \beta_3 &= \alpha_{3}-{(\alpha_3,u_1)}u_{1}-{(\alpha_3,u_2)}u_2 \end{aligned} \Longrightarrow\ \ \begin{aligned} u_1 &= \beta_1\,/\,||\beta_1||\\ u_2 &= \beta_2\,/\,||\beta_2||\\ u_3 &= \beta_3\,/\,||\beta_3|| \end{aligned}

然后把减号项移到左边,即用 uu 表示 ww,写成矩阵形式自然就是 QR 分解了

A=[α1,α2,α3]=[u1,u2,u3][β1(α2,u1)(α3,u1)0β2(α3,u2)00β3]A=[\alpha_1,\alpha_2,\alpha_3]=[u_1, u_2, u_3] \begin{bmatrix} ||\beta_1|| & {(\alpha_2,u_1)} & {(\alpha_3,u_1)}\\ 0 & ||\beta_2|| & {(\alpha_3,u_2)}\\ 0 & 0 & ||\beta_3|| \end{bmatrix}

# 约化 QR 和完全 QR

uu 不一定是 3 列的,因此 QQ 也不一定是方阵,但是不影响 QTQ=IQ^{\rm T} Q=I 这个事。因此所有计算都是对的,只是公式上需要把 “逆” 改成 “伪逆”。这种叫做约化 QR 分解

伪逆矩阵(Moore-Penrose 伪逆)是一个更广泛的概念,它适用于任何矩阵(包括非方阵),并且在某些情况下可以视为左逆或右逆的推广。以下是伪逆与左逆、右逆之间的关系:

伪逆矩阵 AA^\dagger 满足以下四个 Penrose 条件:

  1. AAA=AA A^\dagger A = A
  2. AAA=AA^\dagger A A^\dagger = A^\dagger
  3. (AA)T=AA(A A^\dagger)^{\rm T} = A A^\dagger
  4. (AA)T=AA(A^\dagger A)^{\rm T} = A^\dagger A
  • 当矩阵 AA 是方阵且可逆时:其伪逆 AA^\dagger 就是它的逆矩阵 A1A^{-1},并且此时 A1A^{-1} 既是左逆也是右逆。
  • 当矩阵 AA 是列满秩矩阵(AAm×nm \times n 矩阵且秩为 nnmnm \geq n)时:伪逆矩阵 AA^\dagger 就是它的左逆 ALA^L,满足 ALA=InA^L A = I_n。因为在这种情况下,ATAA^{\rm T} A 是可逆的,伪逆矩阵可以表示为 A=(ATA)1ATA^\dagger = (A^{\rm T} A)^{-1} A^{\rm T}
  • 当矩阵 AA 是行满秩矩阵(AAm×nm \times n 矩阵且秩为 mmmnm \leq n)时:伪逆矩阵 AA^\dagger 就是它的右逆 ARA^R,满足 AAR=ImA A^R = I_m。此时,伪逆矩阵可以表示为 A=AT(AAT)1A^\dagger = A^{\rm T} (A A^{\rm T})^{-1}

如果仍然想要 QQ 是方阵,就再多引入几个正交基补成方阵即可,这叫做完全 QR 分解

# LQ 分解

即对 ATA^{\rm T} 进行 QR 分解。LL 表示下三角矩阵。假定 AA 的 QR 分解为 A=QRA=QR,则 AT=RTQTA^{\rm T}=R^{\rm T} Q^{\rm T}。记 L=RTL=R^{\rm T},这是一个下三角矩阵,也即 LQ 分解的结果表示为

AT=LQTA^{\rm T}=LQ^{\rm T}

这里写 QTQ^{\rm T} 而不写 QQ,可以不用管,这些都是记号上的琐碎。QTQ^{\rm T} 只是为了表示 “行向量正交化”,而以前的 QQ 则表示 “列向量正交化”。

总之操作上只需要记住,LQ 分解就是 “对行向量组正交化”

# 正交投影 / 斜交投影

首先,什么是空间的正交:我们说两个空间正交,就是说在两个空间中各取一任意向量,这两个向量都是正交的。曰:若两空间正交,则各自的正交基也正交

投影的概念和之前是一样的。理解上你先假设空间是一维的,用向量当中的投影概念来理解。

我们这里考虑的空间是矩阵行空间A/BA/B,表示求 AA 的行空间在 BB 的行空间上的投影。

# 投影矩阵

例如我要将某个东西投影到 BB 的行空间,我希望 “投影” 这个操作可以使用一个矩阵来表示,记为 ΠB\Pi_B。也即,如果我要求向量 xxrow(B){\rm row}(B) 上的投影,只需要左乘投影矩阵即可:ΠBx\Pi_Bx

投影后的向量应当满足:

  1. 首先它肯定得先 row(B)\in{\rm row}(B),不然怎么叫 “在 row(B){\rm row}(B)” 上的投影呢?所以肯定是 BB 每一行的线性组合,即存在某列向量 yy 使得 ΠBx=BTy\Pi_Bx=B^{\rm T} y
  2. 减掉投影结果之后,剩下的东西应该垂直于投影面,这是投影 “正交性” 的内涵。即 xΠBxx-\Pi_Bx 应垂直于 row(B){\rm row}(B),也就是垂直于 BB 的每一行,即 B(xΠBx)=0B(x-\Pi_Bx)=\vec 0

先消 ΠB\Pi_B,解得 y=(BBT)1Bxy=(BB^{\rm T})^{-1}Bx,于是 ΠBx=BTy=BT(BBT)1Bx\Pi_Bx=B^{\rm T} y=B^{\rm T} (BB^{\rm T})^{-1}Bx,也即投影矩阵

ΠB=BTy=BT(BBT)1B\Pi_B=B^{\rm T} y=B^{\rm T} (BB^{\rm T})^{-1}B

曰:投影矩阵是对称的。这很好证:外面两个 BB 没变,而对于中间那个 (BBT)1(BB^{\rm T})^{-1},只需要证明求逆(或伪逆)和转置可以交换:

MM1=IT(MM1)T=IT=I(M1)TMT=I(M1)T=(MT)1\begin{aligned} MM^{-1}=I\ \ {\xRightarrow{\rm T}}\ (MM^{-1})^{\rm T}&=I^{\rm T}=I\\ (M^{-1})^{\rm T} {\color{orange}M^{\rm T}}&=I\\ (M^{-1})^{\rm T}=(&{\color{orange}M^{\rm T}})^{-1} \end{aligned}

# 正交投影

以前使用投影我们得到了 “正交分解”,这里也希望做类似操作,即将空间拆成 “平行分量” 与 “垂直分量”,即

A=A/B+A/BA=A/B+A/B^\perp

A/BA/B,也即 “AA 的行空间投影到 BB 的行空间”,只需要把它的每一行都投影过去即可。只不过投影矩阵要作用在列向量上、且返回一个列向量,因此乘投影矩阵之前要先把 AA 转置一下,最后还得转回来:

A/B=(ΠBAT)T=AΠBT=AΠB=ABT(BBT)1BA/B=(\Pi_BA^{\rm T})^{\rm T}=A\Pi_B^{\rm T}=A\Pi_B=AB^{\rm T} (BB^{\rm T})^{-1}B

这个就是 row(A){\rm row}(A)row(B){\rm row}(B) 上的分量(投影)。进一步推得,垂直方向的分量

A/B=AAΠB=A(IΠB)A/B^\perp=A-A\Pi_B=A(I-\Pi_B)

# 使用 LQ 分解求正交投影

一个用于数值计算的方法。

我们说 “正交分解”,就是把一个向量根据 “某一给定向量” 拆成平行与垂直两部分。对应到正交投影,就是要把 row(A){\rm row}(A) somehow “组合进” row(B){\rm row}(B) 中。而正交化正是其中一种方法。

考虑 M=[BA]M=\begin{bmatrix}B\\A\end{bmatrix},对它的行做正交化。这样当做完矩阵 BB 的部分时,BB 的正交基就出来了。接下来开始做矩阵 AA 的部分,它把 AA 行空间中 “平行于 BB” 的部分全部抹掉了,只剩下 “垂直于 BB” 的部分。

做完之后,把正交矩阵按 BBAA 分成上下两块

M=[BA]=LQT=[L110L21L22][Q1TQ2T]M=\begin{bmatrix}B\\A\end{bmatrix}=LQ^{\rm T}=\begin{bmatrix}L_{11}&\boldsymbol0 \\ L_{21}&L_{22}\end{bmatrix}\begin{bmatrix}Q_1^{\rm T}\\ Q_2^{\rm T}\end{bmatrix}

这上下两块,上面一块是 row(B){\rm row}(B) 的正交基,下面一块是 row(A){\rm row}(A) 中垂直于 row(B){\rm row}(B) (也即 BB^\perp)的那一部分的正交基。

单独提取 AA 的部分:A=L21Q1T+L22Q2TA=L_{21}Q_1^{\rm T}+L_{22}Q_2^{\rm T},前一项就是 BB 基线性组合,后一项就是 BB^\perp 基线性组合,所以前一项就是落在 row(B){\rm row}(B) 里的 A/BA/B,后一项就是落在 row(B){\rm row}(B)^\perp 里的 A/BA/B^\perp。也即

A/B=L21Q1TA/B=L22Q2T\begin{aligned} A/B&= L_{21}Q_1^{\rm T}\\ A/B^\perp&= L_{22}Q_2^{\rm T} \end{aligned}

这种理解其实不太准确,之后 LQ 分解求斜交投影时会细说。如果要严谨,应该这样写:

[!success] 公式证明
按块提取:B=L11Q1T,A=L21Q1T+L22Q2TB=L_{11}Q_1^{\rm T},\,A=L_{21}Q_1^{\rm T}+L_{22}Q_2^{\rm T},故

A/B=ABT(BBT)B=(L21Q1T+L22Q2T)Q1L11T(L11Q1TQ1L11T)L11Q1T=(L21Q1T+L22Q2T)Q1L11T(L11L11T)L11Q1T=(L21Q1T+L22Q2T)Q1L11T(L11T)L11L11Q1T=(L21Q1T+L22Q2T)Q1Q1T=(L21Q1TQ1+L22Q2TQ1)Q1T=(L21+0)Q1T=L21Q1T\begin{aligned} A/B &= AB^{\rm T} (BB^{\rm T})^\dagger B \\ &= (L_{21}Q_1^{\rm T}+L_{22}Q_2^{\rm T})Q_1L_{11}^{\rm T}(L_{11}Q_1^{\rm T} Q_1L_{11}^{\rm T})^\dagger L_{11}Q_1^{\rm T} \\ &= (L_{21}Q_1^{\rm T}+L_{22}Q_2^{\rm T})Q_1L_{11}^{\rm T}(L_{11}L_{11}^{\rm T})^\dagger L_{11}Q_1^{\rm T} \\ &= (L_{21}Q_1^{\rm T}+L_{22}Q_2^{\rm T})Q_1L_{11}^{\rm T} (L_{11}^{\rm T})^\dagger L_{11}^\dagger L_{11}Q_1^{\rm T} \\ &= (L_{21}Q_1^{\rm T}+L_{22}Q_2^{\rm T})Q_1Q_1^{\rm T} \\ &= (L_{21}Q_1^{\rm T} Q_1+L_{22}Q_2^{\rm T} Q_1)Q_1^{\rm T} \\ &= (L_{21}+{0})Q_1^{\rm T}\\ &=L_{21}Q_1^{\rm T} \end{aligned}

这个过程实际上是:一开始保留 (BBT)(BB^{\rm T})^\dagger,是因为 BB 不一定是方阵,没法把伪逆拆到里面去。但是,一旦写成 B=L11Q1TB=L_{11}Q_1^{\rm T},一方面由 Q1Q_1 的正交性,Q1TQ1Q_1^{\rm T} Q_1 消掉只剩下 L11L_{11};另一方面,LiiL_{ii} 一定是方阵。

# 斜交投影

引入第二个投影空间 row(C){\rm row}(C),构建联合投影空间。垂直分量和之前类似,即 A/[BC]A\big/\begin{bmatrix}B\\C\end{bmatrix}^\perp。平行分量 A/[BC]A\big/\begin{bmatrix}B\\C\end{bmatrix} 进一步拆到两个投影空间上,斜杠后面是投影空间、角标是另一个投影空间。于是

A=A/CB+A/BC+A/[BC]A=A/\!_CB+A/\!_BC+A\big/\begin{bmatrix}B\\C\end{bmatrix}^\perp

下面考虑怎么求 A/CBA/\!_CB

之前是 A/B=ABT(BBT)1BA/B=AB^{\rm T} (BB^{\rm T})^{-1}B,把 BB 换成 [BC]\begin{bmatrix}B\\C\end{bmatrix}

A/[BC]=A[BC]T([BC][BC]T)1[BC]=A[BT,CT]([BC][BT,CT])1[BC]\begin{aligned} A/\begin{bmatrix}B\\C\end{bmatrix}&= A\begin{bmatrix}B\\C\end{bmatrix}^{\rm T} \left(\begin{bmatrix}B\\C\end{bmatrix}\begin{bmatrix}B\\C\end{bmatrix}^{\rm T}\right)^{-1}\begin{bmatrix}B\\C\end{bmatrix}\\ &= A\left[B^{\rm T},\,C^{\rm T}\right]\left(\begin{bmatrix}B\\C\end{bmatrix}\left[B^{\rm T},\,C^{\rm T}\right]\right)^{-1}\begin{bmatrix}B\\C\end{bmatrix} \end{aligned}

这个式子仍然可以看作是 AΠA\Pi 的形式,即投到 BCBC 的联合行空间上。

我们想要的 A/CBA/\!_CB 只是 row(B){\rm row}(B) 上的分量,所以只需要取 BB 那一部分的基,也就是说只需要提取前几行 BB 的部分、最后 CC 的部分直接去掉。因此

A/CB=(A/[BC])[I000]=A[BT,CT]([BC][BT,CT])1[BC][I000]=A[BT,CT]([BC][BT,CT])1[B0]\begin{aligned} A/\!_CB&= \left(A\big/\begin{bmatrix}B\\C\end{bmatrix}\right)\begin{bmatrix}I&{\boldsymbol0}\\{\boldsymbol0}&{\boldsymbol0}\end{bmatrix}\\ &= A\left[B^{\rm T},\,C^{\rm T}\right]\left(\begin{bmatrix}B\\C\end{bmatrix}\left[B^{\rm T},\,C^{\rm T}\right]\right)^{-1}\begin{bmatrix}B\\C\end{bmatrix}\begin{bmatrix}I&{\boldsymbol0}\\{\boldsymbol0}&{\boldsymbol0}\end{bmatrix}\\ &= A\left[B^{\rm T},\,C^{\rm T}\right]\left(\begin{bmatrix}B\\C\end{bmatrix}\left[B^{\rm T},\,C^{\rm T}\right]\right)^{-1}\begin{bmatrix}B\\{\boldsymbol0}\end{bmatrix} \end{aligned}

对于 A/BCA/\!_BC,不是提取后几行。因为 CC 在联合空间的下面,正交化的时候 row(C){\rm row}(C) 的基向量中平行于 row(B){\rm row}(B) 的部分都被抹掉了,因此后几行根本不是 row(C){\rm row}(C) 原来的基。正确的做法是,在构造联合空间时把 CC 放在上面:

A/BC=(A/[CB])[I000]=A[CT,BT]([CB][CT,BT])1[CB][I000]=A[CT,BT]([CB][CT,BT])1[C0]\begin{aligned} A/\!_BC&= \left(A\big/\begin{bmatrix}C\\B\end{bmatrix}\right)\begin{bmatrix}I&{\boldsymbol0}\\{\boldsymbol0}&{\boldsymbol0}\end{bmatrix}\\ &= A\left[C^{\rm T},\,B^{\rm T}\right]\left(\begin{bmatrix}C\\B\end{bmatrix}\left[C^{\rm T},\,B^{\rm T}\right]\right)^{-1}\begin{bmatrix}C\\B\end{bmatrix}\begin{bmatrix}I&{\boldsymbol0}\\{\boldsymbol0}&{\boldsymbol0}\end{bmatrix}\\ &= A\left[C^{\rm T},\,B^{\rm T}\right]\left(\begin{bmatrix}C\\B\end{bmatrix}\left[C^{\rm T},\,B^{\rm T}\right]\right)^{-1}\begin{bmatrix}C\\{\boldsymbol0}\end{bmatrix} \end{aligned}

# 使用 LQ 分解求斜交投影

思路和正交是一样的,投影空间放上面、被投影空间放到下面,即

M=[BCA]M=\begin{bmatrix}B\\C\\A\end{bmatrix}

LQ 分解之,QTQ^{\rm T} 矩阵按 BBCCAA 分成上中下三块

M=[BCA]=[L1100L21L220L31L32L33][Q1TQ2TQ3T]M=\begin{bmatrix}B\\C\\A\end{bmatrix}= \begin{bmatrix} L_{11} & 0 & 0 \\ L_{21} & L_{22} & 0 \\ L_{31} & L_{32} & L_{33} \end{bmatrix} \begin{bmatrix} Q_1^{\rm T} \\ Q_2^{\rm T} \\ Q_3^{\rm T} \end{bmatrix}

从中提取 A=L31Q1T+L32Q2T+L33Q3TA=L_{31}Q_1^{\rm T}+L_{32}Q_2^{\rm T}+L_{33}Q_3^{\mathrm{T}}

这时候,不能像之前正交投影一样直接对应分解式L33Q3TL_{33}Q_3^{\rm T} 的确对应 A/[B;C]A\big/\begin{bmatrix}B;C\end{bmatrix}^\perp,但是不能说 L31Q1T=A/CBL_{31}Q_1^{\rm T}=A/\!_CB,也不能说 L32Q2T=A/BCL_{32}Q_2^{\rm T}=A/\!_BC,因为 BBCC 不一定正交见下图,注意这是平面图而非立体图,row(C){\rm row}(C) 是斜交轴

Q1TQ_1^{\rm T} 的确是 row(B){\rm row}(B) 的基,但是 Q2TQ_2^{\rm T} 不是 row(C){\rm row}(C) 的基,只是 row(C){\rm row}(C) 垂直于 row(B){\rm row}(B) 的部分。因此为了表达 row(C){\rm row}(C) 的基,我们从 LQ 分解中写出 CC 的提取式

C=L21Q1T+L22Q2TC=L_{21}Q_1^{\rm T}+L_{22}Q_2^{\rm T}

解得 Q2T=L221(CL21Q1T)Q_2^{\rm T}=L_{22}^{-1}(C-L_{21}Q_1^{\rm T}),我们把这个东西往 L32Q2TL_{32}Q_2^{\rm T} 里面代:

A=L31Q1T+L32Q2T+L33Q3T=L31Q1T+L32L221(CL21Q1T)+L33Q3T=(L31L32L221L21)Q1T+L32L221C+L33Q3T\begin{aligned} A&= L_{31}Q_1^{\rm T}+L_{32}Q_2^{\rm T}+L_{33}Q_3^{\rm T}\\ &= L_{31}Q_1^{\rm T}+L_{32}L_{22}^{-1}(C-L_{21}Q_1^{\rm T})+L_{33}Q_3^{\rm T}\\ &= (L_{31}-L_{32}L_{22}^{-1}L_{21})Q_1^{\rm T}+L_{32}L_{22}^{-1}C+L_{33}Q_3^{\rm T} \end{aligned}

这三个基就出来了。因此

A/CB=(L31L32L221L21)Q1TA/BC=L32L221C=L32L221[L21L22][Q1TQ2T]A/[BC]=L33Q3T\begin{aligned} A/\!_CB&= (L_{31}-L_{32}L_{22}^{-1}L_{21})Q_1^{\rm T}\\ A/\!_BC&= L_{32}L_{22}^{-1}C\\ &= L_{32}L_{22}^{-1}\begin{bmatrix}L_{21}&L_{22}\end{bmatrix}\begin{bmatrix}Q_1^{\rm T}\\Q_2^{\rm T}\end{bmatrix}\\ A\big/\begin{bmatrix}B\\C\end{bmatrix}^\perp&= L_{33}Q_3^{\rm T} \end{aligned}

推论(用公式或看图立即可得):

  • A/AC=0A/\!_AC=0
  • A/CA=AA/\!_CA=A