QR decomposition and Givens Rotation (QR分解與Givens旋轉)

在最近做的一個研究中,需要對 QR 分解進行更新,因此瞭解了一些關於 QR 分解和 Givens 旋轉的內容。在這裏進行總結。

QR 分解

所謂 QR 分解,就是將一個矩陣(可以不是方陣)分解成一個正交矩陣和一個上三角矩陣。即

A=QR

其中 Q 是正交矩陣,即 Q 中的列向量互相正交,即 QTQ=IR 是上三角矩陣。當 A 爲非奇異矩陣時,這個分解是唯一的。

實現 QR 分解的算法有多種,包括 Gram–Schmidt 正交化,Householder 變換,以及 Givens 旋轉。本文主要討論用 Givens 旋轉來實現的方法。關於 Gram–Schmidt 正交化實現的方法可以參看 QR Decomposition with Gram-Schmidt

Givens 旋轉

Givens 旋轉在數值計算中的主要作用在於將矩陣中的元素置換爲0。具體來說,就是將原矩陣做成一個正交的 Givens 矩陣,然後將原矩陣特定位置上的元素變成0。下面以一個 2×2 矩陣的例子進行說明。

A=[1324]

在Givens 旋轉一般考慮同一列中的兩個元素,並通過左乘正交陣的方法把下方的元素變成0,針對上面的矩陣 A ,我們考慮第一列,並對 A 陣左乘一個正交陣,即

[0.31620.89440.89440.3162][1324]=[3.162304.42720.6325]

其中左乘的正交陣被稱爲 Givens 矩陣,具有形式:

G=[cosθsinθsinθcosθ]

在這裏不詳細討論如何計算 Givens 矩陣,在 MATLAB 中可以直接調用 givens() 函數來進行計算。對於多維的矩陣,Givens 矩陣一般寫作下面的形式。

G=10000cs00sc00001

QR 分解與 Givens 旋轉

下面我們來說明如何通過 Givens 旋轉 來實現 QR 分解。其實原理很簡單,就是通過將原矩陣 A 的主對角線下方的元素都通過 Givens 旋轉置換成0,形成上三角矩陣 R ,同時左乘的一系列 Givens 矩陣相乘得到一個正交陣 Q

可以通過下圖來理解,其中 × 表示沒有發生變化的元素,m 表示值改變的元素,每一個向右的箭頭表示原矩陣左乘了一次 Givens 矩陣。

×××××××××m×0m×mm×mm00mm×mm×m00m×0m×m

即最終可以得到如下的形式:
QTA=R

從而得到

A=QR

相比於其他兩種實現 QR 分解的方法,基於 Givens 選擇的方法的優點在於其計算易於並行化,且在面對稀疏矩陣 (Sparse Matrix) 是可以減少計算量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章