本文的閱讀等級:中級
設 為一個
階實矩陣,
,QR 分解
滿足以下兩個條件:
是
階矩陣,其行向量 (column vector) 組成單範正交 (orthonormal) 向量集,
是
階上三角矩陣。Gram-Schmidt 正交化是最常見於一般線性代數教科書的 QR 分解演算法 (見“Gram-Schmidt 正交化與 QR 分解”),以下稱之為古典 (classical) Gram-Schmidt 正交化,簡稱 CGS。不幸的是,當數值計算引入捨入 (roundoff) 誤差時,CGS 最終產生的
矩陣的行向量正交性可能變的很糟,就此觀點而言,CGS 是數值不穩定的。本文介紹 CGS 的一個修改版本,稱為改良 (modified) Gram-Schmidt 正交化,簡稱 MGS[1,2]。
我們從 QR 分解推導 Gram-Schmidt 正交化過程。將 和
以行向量表示為
和
。因為
,
是上三角矩陣,乘開
,如下:
比較等號兩邊即得
由 可知
,故
不含零主對角元,就有
將 當成與下列向量同方向的單位向量:
故得 。若
為一個單範正交集,為了保證
,令
對於 ,就有
將以上結果整理成演算法,如下:
古典 Gram-Schmidt 正交化
- 對於
-
- 對於
-
-
-
-
接下來我用一個例子說明 CGS 的數值不穩定現象[3]。考慮下列 矩陣
設 為極小正數,數值計算誤差使得
,此處
代表浮點運算的捨入過程,CGS 計算步驟如下:
:
:
:
最後得到
明顯地, 和
偏離正交。
上例顯示 CGS 產生新正交基底 (即 ) 的計算出了問題,合併
和
可得
這個算式之所以發生錯誤的原因在於 並非完全正交,如上例
,若
的各元數值都很小,經正規化而得的
很容易遠離
。為了克服此問題,我們應設法降低不全然正交的基底
造成的破壞。
令 ,
,
,若
為一個單範正交集 (實際上,此條件並不成立),對於
,就有
所以
Gram-Schmidt 正交化的主要公式可表示為
用 為例說明,
上式的意思是先將 投影至
的分量扣除,再將殘餘量
投影至
的分量扣除,這個步驟可以「投影消滅」因
而產生的誤差。下面是根據
新算式整理而成的改良法 MGS,比較 CGS 和 MGS,兩者唯一的差別在於
的計算方式不同。
改良 Gram-Schmidt 正交化
- 對於
-
- 對於
-
-
-
-
將 MGS 應用於計算上例 矩陣的 QR 分解。當
和
,MGS 和 CGS 有相同結果,以下只列出
的情況:
這個 向量和 CGS 的結果完全不同,MGS 算出的
幾乎正交,QR 分解矩陣為
MGS 雖然可以降低數值計算造成的誤差,但仍不能保證最終得到的 具備良好的正交性,也就是說,不論 CGS 或 MGS 都不適用於 QR 分解。現實應用中,我們經常採用 Householder 變換或 Givens 旋轉計算 QR 分解 (見“Householder 變換於 QR 分解的應用”和“Givens 旋轉於 QR 分解的應用”),他日將另文解說各方法的數值穩定性和運算量。
本文參考:
[1] Gene H. Golub and Charles F. Van Loan, Matrix Computations, 2nd ed., The John Hopkins University Press, 1989, pp 217-219.
[2] Carl Meyer, Matrix Analysis and Applied Linear Algebra, Society for Industrial and Applied Mathematics, 2000, pp 314-317.
[3] Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms, Society for Industrial and Applied Mathematics, 1996, pp 388.
妙哉! 期待續集!
為了凸顯
不必是方陣,我將原先的例子更換為
階矩陣。
这种矩阵分解的方法从原始GS正交化到MGS的讲解方法让我感觉很新鲜,比单纯从算法流程的角度讲解深刻。谢谢周老师!
其實我寫的有些心虛,總覺得從CGS到MGS不夠慎密,後來翻閱一些材料也沒有具體收穫,暫時將就先放著,有更好的主意時再修改好了。
請問 如果A的維度m*n 且m>n
則Q的最後m-n個行向量要怎麼算呢??
你可以使用Steinitz 替換原則將mxn階矩陣擴充為mxm階,然後再執行正交化。Steinitz 替換原則的細節請見下文:
https://ccjou.wordpress.com/2010/06/15/%E5%9F%BA%E5%BA%95%E8%88%87%E7%B6%AD%E5%BA%A6-%E5%B8%B8%E8%A6%8B%E5%95%8F%E7%AD%94%E9%9B%86/
謝謝你的回覆 另外如果我想計算QR分解的複雜度 (需要做幾次乘法) (要包含Q最後的m-n個行向量)
這查書查的到嗎??
真是個頭疼的問題啊..
請見下文:
https://ccjou.wordpress.com/2011/06/03/qr-%E5%88%86%E8%A7%A3%E7%9A%84%E6%95%B8%E5%80%BC%E8%A8%88%E7%AE%97%E6%96%B9%E6%B3%95%E6%AF%94%E8%BC%83/
這些數據是從Gene H. Golub and Charles F. Van Loan, Matrix Computations找到的。
其实历史上Laplace解最小二乘问题时就已经用MGS了,后来Schmidt使用的反而被称为CGS。
謝謝分享,有興趣深入了解的讀者請參閱下文:
Click to access 0907.4695v1.pdf