QR分解法是求中小型矩阵全部特征值的最有效并广泛应用的方法。
一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量。
QR 分解
在学习QR方法之前需要知道什么是QR分解。不过相信每个人都在线性代数课上学过了。
总的来说,矩阵QR分解有三种方法:
- 经典的 Gram-Schmidt 正交化方法
有数值不稳定的缺点,可以用改进的Gram-Schmidt方法
2. Householder 变换法:数值稳定,适用于稠密矩阵
3. Givens 变换:数值稳定,适用于稀疏矩阵
详细的可以看某位大佬的这个回答:
QR分解的三种实现方法(Gram schmidt等)各自有什么优势和劣势?www.zhihu.com如何理解 Householder 变换和 Givens 变换可以看这个回答:
如何理解Householder变换和Givens旋转?www.zhihu.com![ea234f68d6e7e2697160a32256a5bf64.png](https://i-blog.csdnimg.cn/blog_migrate/a58639d37654789e303f96c1343ec471.png)
Householder 变换能将一个向量变换为坐标向量的若干倍
计算出这个 Householder 矩阵需要
function
而 Givens 变换将向量的某一个位置变换为0
计算出这个 Givens 矩阵只需要
function
对于一个低阶的稠密矩阵,通常的方法就是 Householder 变换了。
function
对一个可逆矩阵
上 Hessenberg 化
用 Householder 变换还能把一个矩阵变换为上海森伯格矩阵:
这时
function
为什么要将矩阵化为上Hessenberg矩阵呢?
原因在于,用Household变换求解一个常规矩阵的QR分解需要的时间是
(因为求出一个Householder矩阵需要
另有参考文献:
lanczos算法及C++实现(二)实对称阵奇异值分解的QR算法 - qxred - 博客园www.cnblogs.com![8017418435422bfc68dbafe7eaf745fb.png](https://i-blog.csdnimg.cn/blog_migrate/720a52754d2f09164f4cb6961e073bca.jpeg)
本文代码的 GitHub 链接:
https://github.com/wunian12138/zhihu/tree/master/MATLAB/qr_methodgithub.com欢迎 star