QR 分解法是一種將矩陣分解的方式。這種方式，把矩陣分解成一個正交矩陣與一個上三角矩陣的積。QR 分解經常用來解線性最小二乘法問題。QR 分解也是特定特徵值演算法即 QR 演算法的基礎。 類別及定義 方陣 任何方塊矩陣 A 都可以分解為 A QR 其中 Q 是正交矩陣（意味著 QTQ I）而 R 是上三角矩陣。如果 A 是非奇異的，且限定 R 的對角線元素為正，則這個因數分解是唯一的。 更一般的說，我們可以因數分解複數 mn 矩陣（有著 m n）為 mn 么正矩陣（在 Q Q I 的意義上，不需要是方陣）和 n n 上三角矩陣的乘積。對 mn 的情況，在 Q 是 mm 方陣，而 R 則是 mn 矩陣。 長方形矩陣 更一般地，我們可以將 mn 的 A 矩陣，其中，分解成 mm 酉矩陣 Q 和 mn 三角矩陣 R 的乘積。由於 mn 上三角矩陣的底部 mn 行完全由零組成，因此對 R 或 R 和 Q 進行分解通常很有用： A QR Q begin bmatrix R_1 0 end bmatrix begin bmatrix Q_1 Q_2 end bmatrix begin bmatrix R_1 0 end bmatrix Q_1 R_1 其中 R1 是 nn 上三角矩陣，0 是零矩陣，Q1 是 mn，Q2 是，且 Q1 和 Q2 都是有正交列。 call Q1R1 the thin QR factorization of A Trefethen and Bau call this the reduced QR factorization If A is of full rank n and we require that the diagonal elements of R1 are positive then R1 and Q1 are unique but in general Q2 is not R1 is then equal to the upper triangular factor of the Cholesky decomposition of A A ATA if A is real QL、RQ 和 LQ 分解 類似的，我們可以定義 A 的 QL，RQ 和 LQ 分解。其中 L 是下三角矩陣。 QR 分解的求法 QR 分解的實際計算有很多方法，例如 Givens 旋轉、Householder 變換，以及 GramSchmidt 正交化等等。每一種方法都有其優點和不足。 使用 Householder 變換 Householder 變換 Householder 變換將一個向量關於某個平面或者超平面進行反射。我們可以利用這個操作對 m times n m geqq n 的矩陣 A 進行 QR 分解。 矩陣 Q 可以被用於對一個向量以一種特定的方式進行反射變換，使得它除了一個維度以外的其他所有分量都化為 0。 令 mathbf x 為矩陣 A 的任一 m 維實列向量，且有 mathbf x alpha（其中 alpha 為標量）。若該演算法是透過浮點數實現的，則 alpha 應當取和 mathbf x 的第 k 維相反的符號（其中 x_k 是要保留不為 0 的項），這樣做可以避免精度缺失。對於複數的情況，令 alpha mathrm emathrm i arg x_k mathbf x ，並且在接下來矩陣 Q 的構造中要將矩陣轉置替換為共軛轉置。 接下來，設 mathbf e_1 為單位向量 1 0 cdots 0T， 為歐幾里德範數，I 為 m times m 單位矩陣，令 mathbf u mathbf x alphamathbf e_1 ， mathbf v mathbf uovermathbf u ， Q I 2 mathbf vmathbf vT 。 或者，若 A 為復矩陣，則 Q I 1wmathbf vmathbf vH，其中 w mathbf xHmathbf vmathbf mathbf vHmathbf x 式中 mathbf xH 是 x 的共軛轉置（亦稱埃爾米特共軛或埃爾米特轉置）。 則 Q 為一個 m times m 的 Householder 矩陣，它滿足 Qmathbf x alpha 0 cdots 0T 利用 Householder 矩陣，可以將一個 m times n 的矩陣 A 變換為上三角矩陣。 首先，我們將 A 左乘透過選取矩陣的第一列得到列向量 x 的 Householder 矩陣 Q_1。這樣，我們得到的矩陣 Q_1 A 的第一列將全部為 0（第一行除外）： Q_1A begin bmatrix alpha_1stardotsstar 0 vdots A 0 end bmatrix 這個過程對於矩陣 A（即 Q_1 A 排除第一行和第一列之後剩下的方陣）還可以繼續做下去，從而得到另一個 Householder 矩陣 Q_2。注意到 Q_2 其實比 Q_1 要小，因為它是在 Q_1 A 而非 A 的基礎上得到的。因此，我們需要在 Q_2 的左上角補上 1，或者，更一般地來說： Q_k begin bmatrix I_k1 0 0 Q_kend bmatrix 將這個迭代過程進行 t 次之後（t min m1 n） 將有 R Q_t cdots Q_2Q_1A 其中 R 為一個上三角矩陣。因此，令 Q Q_1T Q_2T cdots Q_tT 則 A QR 為矩陣 A 的一個 QR 分解。 相比與 GramSchmidt 正交化，使用 Householder 變換具有更好的數值穩定性。 例子 現在要用 Householder 變換求解矩陣 A 的 QR 分解。 A begin bmatrix 0 3 1 0 4 2 2 1 1 end bmatrix 因為 alpha_1 0 0 2T 令 a_1 alpha_1_2 2，則 omega_1 frac alpha_1 a_1e_1alpha_1 a_1e_1_2 frac 1sqrt 21 0 1T 則有 H_1 I 2omega_1omega_1H begin bmatrix 0 0 1 0 1 0 1 0 0 end bmatrix 從而， H_1A begin bmatrix 2 1 1 0 4 2 0 3 1 end bmatrix 記 beta 4 3T 則 b_1 beta_2_2 5。令 omega_2 frac beta_2 b_1e_1beta_2 b_1e_1_2 frac 1sqrt 101 3T hat H_2 I 2omega_2omegaH frac 15 begin bmatrix 4 3 3 4 end bmatrix 記， H_2 begin bmatrix 1 0T 0 hat H_2 end bmatrix begin bmatrix 1 0 0 0 frac 45 frac 35 0 frac 35 frac 45 end bmatrix 則， R H_2 H_1A begin bmatrix 2 1 1 0 5 1 0 0 2 end bmatrix 那麼 Q H_1H_2 frac 15 begin bmatrix 0 3 4 0 4 3 5 0 0 end bmatrix 使用吉文斯旋轉 吉文斯旋轉 吉文斯旋轉表示為如下形式的矩陣 G i j theta begin bmatrix 1 cdots 0 cdots 0 cdots 0 vdots ddots vdots vdots vdots 0 cdots c cdots s cdots 0 vdots vdots ddots vdots vdots 0 cdots s cdots c cdots 0 vdots vdots vdots ddots vdots 0 cdots 0 cdots 0 cdots 1 end bmatrix 這裡的 c cos θ 和 s sin θ 出現在第 i 行和第 j 行與第 i 列和第 j 列的交叉點上。就是說，吉文斯旋轉矩陣的所有非零元定義如下： begin align g_k k 1 qquad text for k ne ij g_i i c g_j j c g_i j s g_j i s end align 乘積 表示向量 x 在 ij 平面中的逆時針旋轉 θ 弧度。 吉文斯旋轉作用於 QR 分解 對於一個向量 begin arraylcl A begin bmatrix a b end bmatrix end array 如果， r sqrt a2 b2 c frac ar s frac br 那麼，就存在旋轉矩陣 G，使 A 底部轉成 0。 A_2_Sub begin bmatrix c s s c end bmatrix begin bmatrix a b end bmatrix begin bmatrix r 0 end bmatrix 每一次的旋轉，吉文斯旋轉都可以將一個元素化成 0，直到將原始矩陣轉成一個上三角矩陣，則完成分解。 A QR Q G_1TG_2T cdots G_kT 例子 A_1 begin bmatrix 6 5 0 5 1 4 0 4 3 end bmatrix r sqrt 6 2 52 approx 78102 c 6 r approx 07682 s 5 r approx 06402 A_2 G_1A_1 begin bmatrix c s 0 s c 0 0 0 1 end bmatrix begin bmatrix 6 5 0 5 1 4 0 4 3 end bmatrix approx begin bmatrix 78102 44813 25607 0 24327 30729 0 4 3 end bmatrix 對於 A_2 子矩陣 A_2_Sub A_2_Sub begin bmatrix 24327 30729 4 3 end bmatrix r sqrt 243272 42 approx 46817 c 24327 r approx 05196 s 5 r approx 08544 G_2A_2 begin bmatrix 1 0 0 0 c s 0 s c end bmatrix begin bmatrix 78102 44813 25607 0 24327 30729 0 4 3 end bmatrix approx begin bmatrix 78102 44813 25607 0 46817 09664 0 0 41843 end bmatrix R G_2A_2 G_2 G_1 A_1 Q G_1T G_2T begin bmatrix 07682 03327 05470 06402 03992 06564 0 08544 05196 end bmatrix 使用格拉姆 施密特正交化方法 基本思想 格拉姆 施密特正交化的基本想法，是利用投影原理在已有正交基的基礎上構造一個新的正交基。 設 boldsymbol v in boldsymbol Vn。boldsymbol Vk 是 boldsymbol Vn 上的 k 維子空間，其標準正交基為 boldsymbol eta_1ldots boldsymbol eta_k ，且 boldsymbol v 不在 boldsymbol Vk 上。由投影原理知，boldsymbol v 與其在 boldsymbol Vk 上的投影 mathrm proj_boldsymbol Vk boldsymbol v 之差 boldsymbol beta boldsymbol v sum_i1kmathrm proj_boldsymbol eta_iboldsymbol v boldsymbol v sum_i1klangle boldsymbol v boldsymbol eta_i rangle boldsymbol eta_i 是正交於子空間 boldsymbol Vk 的，亦即 boldsymbol beta 正交於 boldsymbol Vk 的正交基 boldsymbol eta_i。因此只要將 boldsymbol beta 單位化，即 boldsymbol eta_k1 frac boldsymbol betaboldsymbol beta frac boldsymbol betasqrt langle boldsymbol betaboldsymbol beta rangle 那麼 boldsymbol eta_1ldots boldsymbol eta_k boldsymbol eta_k1 就是 boldsymbol Vk 在 boldsymbol v 上擴充套件的子空間 mathrm spanboldsymbol vboldsymbol eta_1boldsymbol eta_k 的標準正交基。 根據上述分析，對於向量組 boldsymbol v_1ldots boldsymbol v_m 張成的空間 boldsymbol Vm mn，只要從其中一個向量（不妨設為 boldsymbol v_1 ）所張成的一維子空間 mathrm spanboldsymbol v_1 開始（注意到 boldsymbol v_1 就是 mathrm spanboldsymbol v_1 的正交基），重複上述擴充套件構造正交基的過程，就能夠得到 boldsymbol Vn 的一組正交基。這就是格拉姆 施密特正交化。 格拉姆 施密特正交化演算法 首先需要確定已有基底向量的順序，不妨設為 boldsymbol v_1ldots boldsymbol v_n 。GramSchmidt 正交化的過程如下： boldsymbol beta_1 boldsymbol v_1 boldsymbol beta_2 boldsymbol v_2langle boldsymbol v_2 boldsymbol eta_1 rangle boldsymbol eta_1 boldsymbol beta_3 boldsymbol v_3 langle boldsymbol v_3 boldsymbol eta_1 rangle boldsymbol eta_1 langle boldsymbol v_3 boldsymbol eta_2 rangle boldsymbol eta_2 vdots vdots boldsymbol beta_n boldsymbol v_nsum_i1n1langle boldsymbol v_n boldsymbol eta_i rangle boldsymbol eta_i 這樣就得到 mathrm spanboldsymbol v_1 ldots boldsymbol v_n 上的一組正交基 boldsymbol beta_1 ldots boldsymbol beta_n ，以及相應的標準正交基 boldsymbol eta_1 ldots boldsymbol eta_n 。 例子 現在要用格拉姆 施密特變換求解矩陣 A 的 QR 分解。 A begin bmatrix 1 2 4 0 0 5 0 3 6 end bmatrix 令， a 1 0 0 q_1 frac aa begin bmatrix 1 0 0 end bmatrix hat q_2 b b q_1 q_1 begin bmatrix 2 0 3 end bmatrix 2 begin bmatrix 1 0 0 end bmatrix begin bmatrix 0 0 3 end bmatrix q_2 frac hat q_2hat q_2 begin bmatrix 0 0 1 end bmatrix hat q_3 c c q_1 q_1 c q_2 q_2 begin bmatrix 4 5 6 end bmatrix 4 begin bmatrix 1 0 0 end bmatrix 6 begin bmatrix 0 0 1 end bmatrix begin bmatrix 0 5 0 end bmatrix q_3 frac hat q_3hat q_3 begin bmatrix 0 1 0 end bmatrix 那麼可知， Q begin bmatrix 1 0 0 0 0 1 0 1 0 end bmatrix 由 A QR，可知， R begin bmatrix 1 2 4 0 3 6 0 0 5 end bmatrix Matlab MATLAB 以 qr 函式來執行 QR 分解法，其語法為 QRqr A 其中 Q 代表正規正交矩陣， 而 R 代表上三角形矩陣。 此外，原矩陣 A 不必為正方矩陣； 如果矩陣 A 大小為 m times n，則矩陣 Q 大小為 m times m，矩陣 R 大小為 m times n。 Category 矩陣分解 用途 解線性方程組 對於直接求解線性方程組的逆，用 QR 分解的方法求解會更具有資料的穩定性。 對於求解一個線性系統 Ax b 這裡 A 的維度是 m times n。 如果 m leq n 那麼 AT QR 這裡 QT Q1。 R 的形式是 R begin bmatrix R_1 0 end bmatrix，R_1 是 R 上不為 0 的部分。 那麼對於 x Q begin bmatrix left R_1textsf Tright1 b 0 end bmatrix 如果 m n 那麼 A QR 這裡 QT Q1。本質是最小化 Ahat x b hat x R_11 left Q_1textsf T bright 參考文獻 外部連結