首先我們要先知道何為 \(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\}\) 分開。