QR分解模拟器 返回
数值线性代数模拟器

QR分解模拟器 — 格拉姆-施密特与最小二乘

使用改进格拉姆-施密特法将3×3矩阵 A 分解为正交矩阵 Q 与上三角矩阵 R,并通过 Rx=Qᵀb 的回代求最小二乘解。

参数设置
A[0][0] 对角元
A[1][1] 对角元
A[2][2] 对角元
b[0] 右端项

A 的非对角元和 b 的其余分量固定为:A[0][1]=1, A[0][2]=0, A[1][0]=1, A[1][2]=1, A[2][0]=0, A[2][1]=1, b[1]=2, b[2]=2。默认值下 x=(1,1,1),残差≈0,Q 正交性误差≈0。

计算结果
det(A) = 带符号 |det(R)|
x_1 最小二乘解
残差 ‖Ax-b‖₂
Q 正交性误差 ‖QᵀQ-I‖_F
A、b、Q、R、x 的可视化

上段=A 矩阵和 b 向量/中段=Q(正交,列=q₁ q₂ q₃)和 R(上三角,蓝=上三角・灰=下三角)/下段=解向量 x

理论与主要公式

QR分解将列线性无关的矩阵 A 分解为正交矩阵 Q 与上三角矩阵 R 之积,是最小二乘问题 ‖Ax-b‖₂ 的标准工具。

Q 为正交、R 为上三角:

$$A = Q\,R, \qquad Q^{\top}Q = I$$

改进格拉姆-施密特法的递推(更新第 k 列):

$$r_{kk} = \|a_k^{(k-1)}\|_2,\quad q_k = \frac{a_k^{(k-1)}}{r_{kk}},\quad r_{kj} = q_k^{\top} a_j^{(k-1)},\quad a_j^{(k)} = a_j^{(k-1)} - r_{kj} q_k$$

最小二乘解通过对 Rx=Qᵀb 进行回代得到:

$$\min_x \|Ax - b\|_2^2 \iff R\,x = Q^{\top} b$$

当 A 为方阵且非奇异时,残差为 0,行列式满足 |det(A)| = |det(R)| = ∏ r_{kk}。

QR分解模拟器是什么

🙋
"QR分解"中的字母 Q 和 R 有什么含义吗?为什么用这两个字母?
🎓
好问题。Q 表示"正交(Orthogonal)",这一约定来源于早期数学文献;R 表示"右三角(Right triangular)",也就是上三角。豪斯霍尔德和格拉姆-施密特各自从不同语境引入并被后人沿用。在上面的模拟器中使用默认值(A 对角=1, 0, 1)你可以看到:Q 是正交的,R 是上三角的。"Q正交性误差"卡片大约为 1e-15,这正是机器精度,是 Q 正交性的数值证据。
🙋
默认值下残差也是 0。所以虽然叫"最小二乘",但实际上得到的答案和普通线性方程组是一样的?
🎓
观察很敏锐。当 A 是方阵且非奇异时,最小二乘解就是精确解,残差为零。最小二乘真正的威力体现在"方程数大于未知数"(超定)的情况下,或者由于测量噪声不存在精确解时。本工具为了可视化使用 3×3,但 Rx=Qᵀb 的回代解法对长方形矩阵的最小二乘完全一样。试试拖动 A[1][1] 滑块离开 0——det 会变,x 也会变,这就是线性方程组的解。
🙋
那和直接解正规方程 AᵀAx=Aᵀb 有什么区别?教科书都先讲正规方程。
🎓
数学上是同一个解,但数值上差别巨大。一旦构造 AᵀA,条件数就会平方为 κ(A)²。比如 κ(A)=10⁶,则 κ(AᵀA)=10¹²,双精度的 15 位有效数字会丢掉 12 位。而走 QR 路线条件数仍然是 κ(A),只丢一半。所以现代数值库(NumPy 的 lstsq、MATLAB 的反斜杠)内部都用 QR 或 SVD。教科书先讲正规方程是因为推导直观,但实现时应当避免它。
🙋
为什么要用"改进"的格拉姆-施密特?经典版本不行吗?
🎓
经典格拉姆-施密特(CGS)数值上很脆弱。它一次性把过去所有正交分量减去,舍入误差会累积,结果 Q 会失去正交性(‖QᵀQ-I‖ 出现 1e-3)。改进版(MGS)一个基地一个基地地减,每次都用更新后的中间向量,误差被限制在 1e-15 左右。本工具的"Q正交性误差"卡片正是定量展示了这种差别。在生产代码中常使用更稳健的豪斯霍尔德变换,但 MGS 对于理解概念最直观。

常见问题

经典格拉姆-施密特法(CGS)一次性从每一列向量减去过去所有的正交基分量,而改进格拉姆-施密特法(MGS)使用更新后的中间向量逐个基地依次减去。两者在数学上等价,但在有限精度运算中,CGS会迅速失去正交性,而MGS对舍入误差更稳健,‖QᵀQ-I‖_F 几乎可以保持在机器精度水平。实务中通常选择 MGS 或更稳健的豪斯霍尔德变换。
正规方程 AᵀAx=Aᵀb 的条件数为 κ(A)²,数值上不稳定。而由 A=QR 可得 ‖Ax-b‖²=‖Rx-Qᵀb‖²,所以通过对 Rx=Qᵀb 进行回代求解,条件数仍然是 κ(A),数值稳定性显著提升。只要 A 的列线性无关,解就是唯一的,计算成本也几乎相同。
豪斯霍尔德变换通过依次相乘反射矩阵将 A 上三角化,正交性比 MGS 更好,且更不易破坏稀疏结构。LAPACK 的 geqrf 也基于豪斯霍尔德方式。另一方面,格拉姆-施密特法每次只对一列进行正交化,因此适合流式数据处理或在 GMRES 等迭代解法中进行部分正交化。两者根据用途分别使用。
是的,QR算法是特征值计算的标准方法。通过分解 A_k=Q_k R_k 并形成 A_{k+1}=R_k Q_k 反复迭代,A_k 收敛于上三角矩阵,其对角元就是特征值。结合移位策略(如 Wilkinson 移位)后收敛速度极快,QR算法是几乎所有特征值求解器(如 LAPACK 的 dgeev)的核心。本工具展示的是单步QR分解的可视化。

实际应用

线性回归与统计建模:多项式拟合、多元回归、机器学习的最小二乘问题本质上都是 Ax=b 的最小二乘解。R 的 lm 函数、Python 的 numpy.linalg.lstsq、MATLAB 的反斜杠运算符都在内部执行 QR(或 SVD)。CAE 的参数拟合、流体阻力系数的最小二乘拟合等也都直接使用它。

有限元法的迭代解法:用于大规模稀疏矩阵线性方程组的 GMRES(广义最小残差)法在每次迭代中都通过 MGS 构造 Krylov 子空间的正交基。它是 CFD 与结构分析 Krylov 求解器的核心,向量长度一旦增大,CGS 就会发散,因此必须使用 MGS(或 DGKS 重正交化)。

特征值计算与 PCA:主成分分析(PCA)和模态分析(固有振型分析)以 QR 算法作为标准的特征值提取例程。把本工具展示的单步 QR 分解反复迭代直到上三角化,就能得到结构固有频率分析或机器学习特征提取所需的特征值。

传感器融合与卡尔曼滤波:平方根卡尔曼滤波器直接更新协方差矩阵的乔列斯基因子(或 QR 因子),以避免数值不稳定性。GPS+IMU 融合、机器人控制、航空航天姿态估计等需要兼顾实时性和数值稳定性的场景中,QR 分解都是核心。

常见误解与注意事项

最常见的误解是认为"QR分解只适用于方阵"。实际上对任何 m×n(m≥n)的长方形矩阵都可以直接使用,是求解超定方程组 Ax=b(方程数 m 大于未知数 n)最小二乘解的标准手段。本工具为了可视化使用 3×3,但其计算逻辑就是改进格拉姆-施密特,扩展到长方形只需调整循环范围。实务中 m=10000、n=10 这样的高瘦矩阵非常常见。

其次常见的是"Q 正交所以 QᵀQ=I 在数值计算中也理所当然成立"的想法。理论上没错,但有限精度运算必然引入误差。本工具的"Q正交性误差"卡片显示约 1e-15(双精度机器精度)正是因为改进格拉姆-施密特表现极好。换成经典格拉姆-施密特,对条件数差的矩阵,同样的误差会跳到 1e-3 以上。计算后必须验证正交性是铁律。

最后请注意本模拟器处理的是非对角元几乎全部固定的特殊矩阵族。可调的只有 A 的 3 个对角元和 b 的第 1 个分量,非对角元被固定为数值稳定性较好的值。在实际应用中可能遇到条件数超过 10⁸ 的近病态矩阵,那时即使是 MGS 正交性误差也会增大。本工具适用于概念理解和典型良条件问题;对于极度病态的问题,应选择豪斯霍尔德变换或奇异值分解(SVD)。