QR 算法
一、直观理解:用正交相似变换把矩阵“三角化”
QR 算法是计算矩阵全部(或大量)特征值的经典现代方法之一。基本思想:反复把矩阵做 QR 分解 ,再反过来乘 。由于 ,每步都是正交相似变换,特征值不变;在适当条件下 趋向上三角(或实舒尔型),对角元逼近特征值。
可以把过程理解为:不断用正交变换显露谱信息,而不是直接对特征多项式暴力求根。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 中小规模稠密矩阵的全部特征值;教学理解 eig 背后思想;对称矩阵三对角化后的 QR 迭代。 |
| 核心优点 | 数值稳定(正交变换);可求全部特征值;有位移加速等成熟变体。 |
| 局限与缺点 | 朴素实现 每步且步数多;大稀疏矩阵应使用 eigs/迭代法;手写高效 QR 算法工程量大。 |
实际工作中直接调用 eig/schur,但理解 QR 有助于解释对称矩阵对角化、收敛与稳定性。
三、核心原理
1. 基本 QR 迭代
2. 对称情形
对称矩阵可先 Householder 三对角化,再对三对角做隐式 QR,效率大增,且保持对称。
3. 位移(shift)
用 做 QR 可加速某个特征值收敛,Wilkinson 位移等策略使算法实用化。
4. 实非对称
收敛到实 Schur 型(分块上三角,对角块 1×1 或 2×2 对应复共轭对)。
四、实践要点
- 小矩阵用
eig; - 只需少数极端特征值用
eigs; - 对称正定可与 Cholesky/
svd联系; - 检查正交性损失与残差 。
五、MATLAB 示例
%% 朴素 QR 迭代演示(教学用,非生产实现)
A0 = [ 2 1 0;
1 3 1;
0 1 4];
A = A0;
nIt = 30;
diagHist = zeros(nIt, 3);
for k = 1:nIt
[Q, R] = qr(A);
A = R * Q;
diagHist(k, :) = diag(A)';
end
lamQR = sort(diag(A), "descend");
lamEig = sort(eig(A0), "descend");
fprintf("QR 迭代对角元 ≈ "); disp(lamQR');
fprintf("eig 特征值 = "); disp(lamEig');
fprintf("差异 = %.3e\n", norm(lamQR - lamEig));
figure;
plot(diagHist, "LineWidth", 1.2);
xlabel("迭代"); ylabel("对角元");
title("朴素 QR 迭代下对角元演化");
legend("a_{11}","a_{22}","a_{33}"); grid on;
% 残差检查:用 eig 的特征向量
[V,D] = eig(A0);
fprintf("||A V - V D|| = %.3e\n", norm(A0*V - V*D));
对称矩阵与正交对角化:
S = A0' * A0; % SPD
[V,D] = eig(S);
fprintf("正交性 ||V'V-I|| = %.3e\n", norm(V'*V - eye(3)));
fprintf("重构 ||V D V'-S|| = %.3e\n", norm(V*D*V' - S));
六、如何解释结果
报告特征值列表(按模或大小排序)、是否对称、残差 、计算所用函数。若解释模态,把特征向量与实际变量对应,并注意归一化与符号。
七、常见误区
1. 把朴素 QR 迭代当成工业实现
真实 eig 含平衡、Hessenberg 化、隐式位移等。
2. 大稀疏矩阵调用稠密 eig
内存与时间都可能不可接受。
3. 忽略复特征值成对出现
实矩阵的复谱共轭对称。
4. 特征向量未归一/未对齐就比较
应比较子空间或夹角。
附:建模流程中的落地清单(QR 算法)
在竞赛或课程论文中,仅写出定义式往往不够。建议按下列顺序组织材料,既能保证可复现,也便于评委快速抓住贡献。
1. 问题对齐
先用两三句话说明:题目中的哪个子问题对应本方法,输入是什么,输出要支持什么决策。避免“因为常见所以使用”。若存在更简单的替代方法,应说明为何不够用。
2. 符号与单位
列出核心符号表,强调单位一致。许多错误并非算法失败,而是日/年、米/千米、概率/百分比混用。对无量纲参数,说明取值来源(估计、文献、情景设定)。
3. 关键公式回顾
基本迭代 保持相似,对角元趋向特征值(教学版)。
4. 计算与实现要点
- 固定随机种子(若涉及随机);
- 记录中间量以便手算核对小例子;
- 用极限情形或解析特例做冒烟测试;
- 保存主要输入输出到表格,便于敏感性分析复用。
5. 补充 MATLAB 片段
A=hilb(4); for k=1:40, [Q,R]=qr(A); A=R*Q; end; disp(sort(diag(A))); disp(sort(eig(hilb(4))));
6. 结果报告模板
建议至少报告:特征值列表、残差 、是否对称、所用库函数。
7. 何时不该使用
把朴素 QR 迭代当作工业实现细节全部;或对大稀疏矩阵调用稠密 eig。
完成以上清单后,再进入“小结”中的一句话金句,通常论文的方法段与验证段就会扎实许多。
八、小结
QR 算法通过反复 QR 分解与正交相似变换显露矩阵的特征值结构,是稠密特征值计算的理论与实践支柱。建模中多数时候调用可靠库函数,但理解 QR 有助于正确使用 eig、诊断残差,并在谱方法、PCA、振动与稳定性分析中准确解释结果。