首先我們要先知道何為 \(QR\) 分解。
\(QR\) 分解:
對於任意矩陣 \(A_{m\times n}\) 其中 \(m \ge n\),我們可以將 \(A\) 分解為 \(A = Q_{m\times m}\begin{bmatrix}
R_{n\times n} \\
O_{m-n\times n}
\end{bmatrix}\) 其中 \(Q\) 為正交矩陣,\(R\) 為上三角矩陣,\(O\) 為 \((m-n)\times n\) 的零矩陣。也就是
\[
A = Q_{m\times m}
\begin{bmatrix}
R_{n\times n} \\
O_{m-n\times n}
\end{bmatrix} =
\begin{bmatrix}
| & & | \\
\bq_1 & \cdots & \bq_m \\
| & & | \\
\end{bmatrix}
\begin{bmatrix}
r_{11} & r_{12} & \dots & r_{1n} \\
0 & r_{22} & \dots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & r_{nn} \\ \hdashline
0 & 0 & \dots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & 0
\end{bmatrix}.
\]
這裡先解釋 \(Q\)、\(R\) 矩陣各自代表的意義。
因為 \(A\) 為 \(m\times n\) 的矩陣,因此其行向量(column vector)為 \(\mathbb{R}^m\) 中的向量,行空間(column space)為 \(\mathbb{R}^m\) 的子空間(subspace)。
\(Q\) 矩陣的行向量 \(\{\bq_1, \bq_2,\dots\ , \bq_m\}\) 為一組標準正交基(彼此互相垂直且長度為 \(1\)),其中的前 \(n\) 個向量 \(\{\bq_1, \bq_2,\dots\ , \bq_n\}\) 即為 \(A\) 的行空間的標準正交基(我們這邊先假設 \(\rank(A) = n\),最後會再補充當 \(A\) 不滿足這個條件時該怎麼做),我們將 \(QR\) 分解中 \(R\) 矩陣底下的 \(0\) 去掉之後就會得到下式
\[
A = \hat{Q}R=
\begin{bmatrix}
| & & | \\
\bq_1 & \cdots & \bq_n \\
| & & | \\
\end{bmatrix}
\begin{bmatrix}
r_{11} & r_{12} & \dots & r_{1n} \\
0 & r_{22} & \dots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & r_{nn}
\end{bmatrix}.
\]
注意到這邊的 \(\hat{Q}\) 矩陣只保留了 \(Q\) 矩陣的前 \(n\) 個行向量,因此不是方陣,並且我們知道這 \(n\) 個向量為 \(A\) 矩陣行空間的一組標準正交基,因此我們必定可以利用 \(\{\bq_1, \bq_2,\ \dots\ , \bq_n\}\) 經由一系列的線性組合來得出 \(A\) 矩陣的每一個行向量,所以 \(R\) 矩陣實際上就是紀錄了每個行向量的線性組合係數。
令 \(\{\ba_1, \ba_2, \ldots, \ba_n\}\) 為 \(A\) 的各行向量。則可以把 \(QR\) 分解寫成
\[
\begin{array}{rcl}
\ba_1 &= & r_{11}\cdot \bq_1, \\[0.3cm]
\ba_2 &= & r_{12}\cdot \bq_1 + r_{22}\cdot \bq_2, \\[0.3cm]
&\vdots & \\[0.3cm]
\ba_n &= & r_{1n}\cdot \bq_1 + r_{2n}\cdot \bq_2 + \dots + r_{nn}\cdot \bq_n.
\end{array}
\]
既然這樣就已經可以將 \(A\) 分解成兩個矩陣了,那為甚麼 \(Q\) 矩陣還需要 \(\{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}\) 呢?
其實可以想成是要把 \(A\) 分解的更完整一點,上面我們提到 \(\{\bq_1, \bq_2,\ \dots\ , \bq_n\}\) 其實是 \(A\) 的行空間的基底,而剩下的 \(\{\bq_1, \bq_2,\ \dots\ , \bq_n\}\) 實際上是 \(A\) 行空間的正交補子空間的一組基底,這樣講可能看起來有點複雜,我們先解釋何為正交補子空間
正交補子空間:
\(V\) 為一向量空間,\(A\)、\(B\) 為 \(V\) 的子空間,若滿足 \(A, B\) 內的向量兩兩互相垂直、\(A\cap B=\{0\}\) 且 \(A + B = V\),則稱 \(B\) 為 \(A\) 的正交補子空間,並將 \(B\) 記為 \(A^\perp\)。
(回顧一下:\(A + B = \{\ba + \bb : \ba\in A,\ \bb\in B\}\)。)
因此 \(S_1 = \{\bq_1, \bq_2,\ \dots\ , \bq_n\}\) 與 \(S_2 = \{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}\) 具有以下幾種關係
\[
\begin{aligned}
\vspan(S_1) + \vspan(S_2) &= \mathbb{R}^m, \\[0.3cm]
\vspan(S_1) \cap \vspan(S_2) &= \{0\}, \\[0.3cm]
\ker(A\trans) = \Col(A)^\perp = \vspan(S_1)^\perp &= \vspan(S_2).
\end{aligned}
\]
(可以思考一下最後一個等式為何成立,之後會用到。)
現在我們知道其實 \(\{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}\) 對於組合出 \(A\) 的行向量來說並沒有幫助,現在我們再來觀察下式,應該就能夠理解為何 \(R\) 矩陣底下會需要 \(0\),還有其對應的意義。
\[
\begin{bmatrix}
| & & | \\
\ba_1 & \cdots & \ba_n \\
| & & | \\
\end{bmatrix} =
\begin{bmatrix}
| & & | \\
\bq_1 & \cdots & \bq_m \\
| & & | \\
\end{bmatrix}
\begin{bmatrix}
r_{11} & r_{12} & \dots & r_{1n} \\
0 & r_{22} & \dots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & r_{nn} \\ \hdashline
0 & 0 & \dots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & 0
\end{bmatrix}
\]
這裡把等價的等式寫出來,方便理解
\[
\begin{aligned}
\ba_1 =&\ r_{11}\cdot \bq_1 + r_{nn}\cdot \bq_n &+\ 0\cdot \bq_{n+1} + \dots + 0\cdot \bq_{m}\\[0.3cm]
\ba_2 =&\ r_{12}\cdot \bq_1 + r_{22}\cdot \bq_2 + r_{nn}\cdot \bq_n &+\ 0\cdot \bq_{n+1} + \dots + 0\cdot \bq_{m}\\[0.3cm]
\vdots \\[0.3cm]
\ba_n =&\ r_{1n}\cdot \bq_1 + r_{2n}\cdot \bq_2 + \dots + r_{nn}\cdot \bq_n &+\ 0\cdot \bq_{n+1} + \dots + 0\cdot \bq_{m}
\end{aligned}
\]
因為矩陣的下半部分為 \(0\),因此 \(\{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}\) 並不會影響到計算結果。
求解 \(QR\) 分解:
求 \(QR\) 分解的其中一種求法是利用 Gram–Schmidt 正交化,Gram–Schmidt 正交化所做的事情就是將一組基底 \(\{\bv_1, \bv_2,\ \dots\ , \bv_n\}\) 轉換為一組正交基底 \(\{\beta_1, \beta_2,\ \dots\ , \beta_n\}\)。
(注意,這裡的 \(\beta_i\) 只要求互相垂直,長度不一定為 \(1\))
根據我們上面對 \(QR\) 分解的解釋,應該不難看出只要對 \(A\) 的行向量進行 Gram–Schmidt 正交化,並進行單位化,我們就能得到 \(Q\) 矩陣中的前 \(n\) 行個向量。
而剩下的 \(\{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}\) 要使用上面提到的等式 \(\vspan(\bq_2) = \ker(A^\top)\) 來進行求解,也就是線性方程組 \(A\trans\bx=\bzero\) 的零解,即為 \(\vspan(\bq_2)\) 的一組基底,對其再使用一次 Gram–Schmidt 正交化即可得出 \(\{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}\)。
進行 Gram–Schmidt 正交化:
令 \(\{\ba_1, \ba_2, \ldots, \ba_n\}\) 為 \(A\) 的各行向量。我們對 \(\{\ba_1, \ba_2,\ \dots\ , \ba_n\}\) 進行 Gram–Schmidt 正交化如下:
\[
\begin{align}
&\beta_1 = \ba_1&, \bq_1=\frac{\beta_1}{\lVert \beta_1 \rVert} \\[0.3cm]
&\beta_2 = \ba_2 - \langle \ba_2, \bq_1 \rangle \cdot \bq_1&, \bq_2=\frac{\beta_2}{\lVert \beta_2 \rVert} \\[0.3cm]
&\beta_3 = \ba_3 - \langle \ba_3, \bq_1 \rangle \cdot \bq_1 - \langle \ba_3, \bq_2 \rangle \cdot \bq_2&, \bq_3=\frac{\beta_3}{\lVert \beta_3 \rVert} \\[0.3cm]
& \vdots \\[0.3cm]
&\beta_n = \ba_n - \langle \ba_n, \bq_1 \rangle \cdot \bq_1 -\ \dots\ - \langle \ba_n, \bq_{n-1} \rangle \cdot \bq_{n-1}&, \bq_n=\frac{\beta_n}{\lVert \beta_n \rVert}
\end{align}
\]
進行簡單的移項和代換可得
\[
\begin{aligned}
&\beta_n = \ba_n - \langle \ba_n, \bq_1 \rangle \cdot \bq_1 -\ \dots\ - \langle \ba_n, \bq_{n-1} \rangle \cdot \bq_{n-1}, \\[0.3cm]
\implies
&\ba_n = \langle \ba_n, \bq_1 \rangle \cdot \bq_1 +\ \dots\ + \langle \ba_n, \bq_{n-1} \rangle \cdot \bq_{n-1} + \beta_n, \\[0.3cm]
\implies
&\ba_n = \langle \ba_n, \bq_1 \rangle \cdot \bq_1 +\ \dots\ + \langle \ba_n, \bq_{n-1} \rangle \cdot \bq_{n-1} + \langle \ba_n, \bq_{n} \rangle \cdot \bq_{n}.
\end{aligned}
\]
(可以思考一下為何 \(\beta_n = \langle \ba_n, \bq_{n} \rangle \cdot \bq_{n}\),提示:可以想想為甚麼 \(\lVert \beta_n \rVert = \langle \ba_n, \bq_{n} \rangle\) 想辦法用幾何的方式理解,並且計算上用這個會比較好用。)
根據上式,不難看出 \(\langle \ba_i, \bq_j \rangle\) 其實就是對 \(\{\bq_1, \bq_2,\ \dots\ , \bq_n\}\) 進行線性組合的係數,因此我們有
\[
\begin{align}
A &= \begin{bmatrix}
| & & | \\
\bq_1 & \cdots & \bq_n \\
| & & | \\
\end{bmatrix}
\begin{bmatrix}
r_{11} & r_{12} & \dots & r_{1n} \\
0 & r_{22} & \dots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & r_{nn}
\end{bmatrix} \\[0.3cm]
&= \begin{bmatrix}
| & & | \\
\bq_1 & \cdots & \bq_n \\
| & & | \\
\end{bmatrix}
\begin{bmatrix}
\langle \ba_1, \bq_1 \rangle & \langle \ba_2, \bq_1 \rangle & \dots & \langle \ba_n, \bq_1 \rangle \\
0 & \langle \ba_2, \bq_2 \rangle & \dots & \langle \ba_n, \bq_2 \rangle \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & \langle \ba_n, \bq_n \rangle
\end{bmatrix}
\end{align}
\]
最後,我們使用 \(\vspan(\{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}) = \ker(A^\top)\) 來進行求解。
我們可以使用高斯消去法將 \(A\trans\) 轉化為列階梯形矩陣 \(\hat{A}\)(row echelon form),接著求解 \(A\bx=\bzero\),然後逐一將自由變數設為 \(1\),即可求出 \(\ker(A^\top)\) 的一組基底,最後再利用 Gram–Schmidt 正交化並進行單位化之後,即為 \(\{\bq_{n+1}, \bq_{n+2},\ \dots\ , \bq_m\}\)。
(此部分因為難以將計算過程寫出,因此使用文字描述。)
最後我們將結果排成矩陣,如下
\[
A = Q_{m\times m}
\begin{bmatrix}
R_{n\times n} \\
O_{m-n\times n}
\end{bmatrix} =
\begin{bmatrix}
| & & | \\
\bq_1 & \cdots & \bq_m \\
| & & | \\
\end{bmatrix}
\begin{bmatrix}
\langle \ba_1, \bq_1 \rangle & \langle \ba_2, \bq_1 \rangle & \dots & \langle \ba_n, \bq_1 \rangle \\
0 & \langle \ba_2, \bq_2 \rangle & \dots & \langle \ba_n, \bq_2 \rangle \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & \langle \ba_n, \bq_n \rangle \\ \hdashline
0 & 0 & \dots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \dots & 0
\end{bmatrix}
\]
即完成 \(QR\) 分解。
當 \(\rank(A) \lt n\) 時:
與 \(\rank(A) = n\) 時基本上只差在進行 Gram–Schmidt 正交化的時候,如果完全理解上面的步驟,那麼應該很容易懂,這裡我們直接用一個例子來解釋。
令 \(A\) 為一 \(5\times 4\) 矩陣且 \(\{\ba_1, \ba_2, \ba_3, \ba_4\}\) 為其行向量。假設其中 \(\ba_1\) 跟 \(\ba_2\) 可以組合出 \(\ba_3\),且 \(\{\ba_1, \ba_2, \ba_4\}\) 線性獨立,因此 \(\rank(A) = 3\)。
應該不難注意到,如果根據上面的步驟進行 \(QR\) 分解,在對 \(\ba_3\) 進行 Gram–Schmidt 正交化的時候會出問題,在計算 \(\beta_3\) 的時候會變成 \(0\) 向量,因為 \(\ba_3\) 可以被 \(\ba_1\) 跟 \(\ba_2\) 組合出來,如下:
\[
\begin{align}
&\beta_1 = \ba_1&, \bq_1=\frac{\beta_1}{\lVert \beta_1 \rVert} \\[0.3cm]
&\beta_2 = \ba_2 - \langle \ba_2, \bq_1 \rangle \cdot \bq_1&, \bq_2=\frac{\beta_2}{\lVert \beta_2 \rVert} \\[0.6cm]
&\beta_3 = \ba_3 - \langle \ba_3, \bq_1 \rangle \cdot \bq_1 - \langle \ba_3, \bq_2 \rangle \cdot \bq_2 = \bzero
\end{align}
\]
因此 \(\bq_3\) 並不能通過 \(\ba_3\) 來得出,解決的方法也很簡單,就是利用下一個向量 \(\ba_4\) 來找 \(\bq_3\),若 \(\ba_4\) 也會變成 \(\bzero\) 向量的話就再換下一個,以此類推,如下:
\[
\beta_4 = \ba_4 - \langle \ba_4, \bq_1 \rangle \cdot \bq_1 - \langle \ba_4, \bq_2 \rangle \cdot \bq_2 \quad\quad\quad\quad, \bq_3=\frac{\beta_4}{\lVert \beta_4 \rVert}
\]
這樣可能會好奇,雖然 \(A\) 矩陣有 \(\{\ba_1, \ba_2, \ba_3, \ba_4\}\),但是基底卻只有 \(\{\bq_1, \bq_2, \bq_3\}\),其實這不會造成甚麼問題,想想這些 \(\bq\) 向量所代表的意義,\(\bq_1\) 到 \(\bq_3\) 就是 \(\Col(A)\) 的基底,因此只需要這三個就足以組合出 \(A\) 矩陣了,而剩下的 \(\bq_4\) 和 \(\bq_5\),一樣可以使用與上面相同的解 \(\ker(A^\top)\) 的方式去得出。
最後,在這個狀況下的 \(R\) 矩陣會長的有一點點不一樣,但還是可以用一樣的方式求出。
\[
A = Q_{5\times 4}
\begin{bmatrix}
R_{4\times 4} \\
O_{1\times 4}
\end{bmatrix} =
\begin{bmatrix}
| & | & | & | & | \\
\bq_1 & \bq_2 & \bq_3 & \bq_4 & \bq_5 \\
| & | & | & | & | \\
\end{bmatrix}
\begin{bmatrix}
\langle \ba_1, \bq_1 \rangle & \langle \ba_2, \bq_1 \rangle & \langle \ba_3, \bq_1 \rangle & \langle \ba_4, \bq_1 \rangle \\
0 & \langle \ba_2, \bq_2 \rangle & \langle \ba_3, \bq_2 \rangle & \langle \ba_4, \bq_2 \rangle \\
0 & 0 & \langle \ba_3, \bq_3 \rangle & \langle \ba_4, \bq_3 \rangle \\
0 & 0 & 0 & \langle \ba_4, \bq_4 \rangle \\ \hdashline
0 & 0 & 0 & 0 \\
\end{bmatrix}
\]
但如果了解上面講了甚麼的話,那麼應該不難發現 \(R\) 矩陣中其實有幾個地方不用算,\(\langle \ba_3, \bq_3 \rangle\) 跟 \(\langle \ba_4, \bq_4 \rangle\) 會是 \(0\),原因是 \(\ba_3\) 可以被 \(\bq_1\) 跟 \(\bq_2\) 組合出來,因此 \(\bq_3\) 一定會跟 \(\ba_3\) 垂直,而 \(\bq_4\) 與 \(\Col(A)\) 垂直,所以 \(\langle \ba_4, \bq_4 \rangle\) 也會是 \(0\),所以我們可以改寫成
\[
A = Q_{5\times 4}
\begin{bmatrix}
R_{4\times 4} \\
O_{1\times 4}
\end{bmatrix} =
\begin{bmatrix}
| & | & | & | & | \\
\bq_1 & \bq_2 & \bq_3 & \bq_4 & \bq_5 \\
| & | & | & | & | \\
\end{bmatrix}
\begin{bmatrix}
\langle \ba_1, \bq_1 \rangle & \langle \ba_2, \bq_1 \rangle & \langle \ba_3, \bq_1 \rangle & \langle \ba_4, \bq_1 \rangle \\
0 & \langle \ba_2, \bq_2 \rangle & \langle \ba_3, \bq_2 \rangle & \langle \ba_4, \bq_2 \rangle \\
0 & 0 & 0 & \langle \ba_4, \bq_3 \rangle \\
0 & 0 & 0 & 0 \\ \hdashline
0 & 0 & 0 & 0 \\
\end{bmatrix}.
\]
甚至,你可以把虛線的位置往上調,變成
\[
A = Q_{5\times 4}
\begin{bmatrix}
R_{4\times 4} \\
O_{1\times 4}
\end{bmatrix} =
\begin{bmatrix}
| & | & | & | & | \\
\bq_1 & \bq_2 & \bq_3 & \bq_4 & \bq_5 \\
| & | & | & | & | \\
\end{bmatrix}
\begin{bmatrix}
\langle \ba_1, \bq_1 \rangle & \langle \ba_2, \bq_1 \rangle & \langle \ba_3, \bq_1 \rangle & \langle \ba_4, \bq_1 \rangle \\
0 & \langle \ba_2, \bq_2 \rangle & \langle \ba_3, \bq_2 \rangle & \langle \ba_4, \bq_2 \rangle \\
0 & 0 & 0 & \langle \ba_4, \bq_3 \rangle \\ \hdashline
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
\end{bmatrix}.
\]
此時,雖然虛線不是 \(R\) 與 \(O\) 的分界線,但它卻更有意義了,因為它實際上代表的是 \(\Col(A)\) 與 \(\ker(A\trans)\) 的分界線,也就是將 \(\{\bq_1, \bq_2, \bq_3\}\) 跟 \(\{\bq_4, \bq_5\}\) 分開。