
1. QR分解的本质与数学定义QR分解是将任意m×n矩阵A分解为一个正交矩阵Q和一个上三角矩阵R的乘积的过程。这种分解在数值线性代数中占据核心地位因为它不仅提供了矩阵的结构化表示更为诸多数值计算问题提供了稳定高效的解法。从数学角度看对于实矩阵A其QR分解满足 A QR 其中Q是m×m正交矩阵QᵀQ IR是m×n上三角矩阵当mn时底部为全零行当矩阵A列满秩时可以进一步得到经济型分解 A Q₁R₁ 其中Q₁是m×n矩阵R₁是n×n上三角矩阵2. QR分解的三大经典算法实现2.1 Householder变换法Householder反射是QR分解最稳定的数值算法。通过构造一系列反射矩阵Hₖ逐步将A的下三角部分归零对第k列向量aₖ计算反射向量 v aₖ - sign(a₁ₖ)||aₖ||e₁构造Householder矩阵 H I - 2vvᵀ/(vᵀv)应用变换 A ← HₖA经过n步m≥n时后A被转化为上三角矩阵R而Q H₁H₂...Hₙ关键技巧为避免数值误差通常取sign(a₁ₖ)与a₁ₖ相反并采用向量化的块操作提升性能2.2 Givens旋转法适用于稀疏矩阵或需要选择性归零的场景。通过平面旋转逐步消元对元素a_{ij}ij计算旋转角度 c a_{jj}/r, s -a_{ij}/r r √(a_{jj}² a_{ij}²)构造Givens矩阵G(i,j,θ)应用旋转 A ← GA该方法需要约2n³/3次浮点运算比Householder变换多50%计算量2.3 Gram-Schmidt正交化最直观但数值稳定性最差的方法。分为经典GS和改进GS两种形式经典GS过程 for j 1:n v A(:,j) for i 1:j-1 v v - (Q(:,i)*A(:,j))*Q(:,i) end Q(:,j) v/||v|| end改进GS通过调整计算顺序提升稳定性 for j 1:n v A(:,j) for i 1:j-1 R(i,j) Q(:,i)*v v v - R(i,j)*Q(:,i) end R(j,j) ||v|| Q(:,j) v/R(j,j) end3. QR分解的数值特性分析3.1 稳定性对比Householder变换向后稳定误差界约O(mn²)εGivens旋转同Householder相当但实现更复杂Gram-Schmidt改进GS可达O(mn²)ε经典GS可能O(mn²)κ(A)ε3.2 计算复杂度算法乘法次数适用场景Householder2n²(m-n/3)通用稠密矩阵Givens3n²(m-n/3)稀疏/带状矩阵Gram-Schmidt2mn²需要逐步正交化时4. QR分解的典型应用场景4.1 线性最小二乘问题求解min||Ax-b||₂时正规方程AᵀAxAᵀb的条件数为κ(A)²而QR分解直接得到 x R₁⁻¹(Q₁ᵀb) 条件数仅为κ(A)4.2 特征值计算QR算法通过迭代过程 Aₖ QₖRₖ Aₖ₊₁ RₖQₖ 最终收敛到Schur标准形4.3 矩阵秩揭示R矩阵的非零对角线元素个数即为矩阵秩比SVD计算更高效5. 实际编程实现要点5.1 Householder实现技巧def householder_qr(A): m, n A.shape R A.copy() Q np.eye(m) for k in range(n): x R[k:, k] e np.zeros_like(x) e[0] np.sign(x[0]) * np.linalg.norm(x) v x e v v / np.linalg.norm(v) H np.eye(m) H[k:, k:] - 2 * np.outer(v, v) R H R Q Q H.T return Q, R5.2 数值稳定性增强措施列主元策略每次选择范数最大的列优先处理迭代精化对残差进行二次求解条件数估计通过R矩阵判断问题适定性6. 常见问题排查指南问题现象可能原因解决方案R矩阵对角元异常小矩阵接近秩亏损采用列主元QR或SVD正交性误差大QᵀQ-I解不唯一R奇异添加正则化或约束条件内存不足矩阵维度过大使用分块算法或迭代方法7. 性能优化实践对于大规模矩阵分块算法将矩阵划分为适合缓存的大小通常64×64到256×256并行化利用Householder向量的树形归约GPU加速特别适合Givens旋转的批处理实测数据表明在双精度浮点下1000×1000矩阵CPU约0.5秒GPU加速后可达0.05秒稀疏矩阵密度5%专用算法可提速10倍以上