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

QR 分解模拟器 — 最小二乘法与 Gram-Schmidt

使用 Modified Gram-Schmidt 法将3×3矩阵 A 分解为 Q(直交矩阵)和 R(上三角矩阵),通过 Rx=Qᵀb 的回代求解最小二乘解。

参数设置
A[0][0] 对角分量
A[1][1] 对角分量
A[2][2] 对角分量
b[0] 右端第1分量

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$$

Modified Gram-Schmidt 的递推式(第 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)"即上三角矩阵。这是Householder和Gram-Schmidt在各自的背景下创建的历史产物。看上面的模拟器,默认值(A对角元=1,0,1)中,Q明显是直交的,R是上三角的。"Q正交性误差"卡片显示的约为0(10⁻¹⁵数量级)就是直交的证明。
🙋
默认值下残差也是0。所以说是"最小二乘法",其实就是解普通线性方程组?
🎓
敏锐。当A正则时,最小二乘解=精确解,残差为零。最小二乘法真正展现威力是在"方程数多于未知数(超定系统)"或"存在测量误差、完全解不存在"的情况。本工具用3×3正方矩阵,但Rx=Qᵀb的求解逻辑与长方矩阵的最小二乘完全相同。试试移动"A[1][1]"滑块。det会变,x也会同步改变—这就是线性方程组的解。
🙋
那和正规方程 AᵀAx=Aᵀb 求解有什么区别?教科书上正规方程先出现的。
🎓
数学上解相同,但数值计算有本质区别。形成 AᵀA 会导致条件数跳跃到 κ(A)² 。比如 κ(A)=10⁶,那 κ(AᵀA)=10¹²,倍精度的有效15位中损失12位。而通过QR途径条件数仅为 κ(A),舍入误差减半。所以现代数值库(R的lm函数、Python的numpy.linalg.lstsq、MATLAB的反斜杠)内部都用QR或SVD。教科书先讲正规方程是因为推导直观,实现时应该避免。
🙋
"Modified Gram-Schmidt"为什么要用Modified的?"古典"的不行吗?
🎓
古典Gram-Schmidt(CGS)数值上很脆弱。每列从过去的全部直交分量中"一次性"减去,舍入误差积累,计算后Q的正交性丧失(QᵀQ-I可达10⁻³)。Modified(MGS)是"逐步"一个基向量一个基向量减,用最新结果接力,误差被抑制在10⁻¹⁵左右。本工具的"Q正交性误差"卡片正好定量显示这个差异。实务还会用更稳健的Householder变换,但从概念理解看MGS最直观。

常见问题

古典Gram-Schmidt(CGS)是从每个列向量中一次性减去所有过去的直交基分量,而Modified Gram-Schmidt(MGS)则逐个基向量依次减去。从数学上讲它们等价,但在有限精度运算中,CGS会急剧失去正交性,而MGS对舍入误差更加稳健,‖QᵀQ-I‖_F 基本保持在机器精度水平。在实务中,通常首选MGS,或者更稳健的Householder变换。
正规方程 AᵀAx=Aᵀb 的条件数为 κ(A)²,数值上不稳定。而从 A=QR 可得 ‖Ax-b‖² = ‖Rx-Qᵀb‖²,用回代求解 Rx=Qᵀb 时条件数仅为 κ(A),数值稳定性大幅提高。若A的列线性无关,解唯一且计算成本相当。
Householder变换通过依次应用镜射矩阵将A化为上三角,正交性比MGS更好,且不易破坏稀疏结构。LAPACK的geqrf采用Householder方法。而Gram-Schmidt法逐列直交化,易于流式处理和迭代方法(如GMRES)中的部分正交化。两者应根据使用场景选择。
是的,QR算法是标准的特征值计算方法。对A_k进行QR分解得A_k=Q_kR_k,然后令A_{k+1}=R_kQ_k,重复迭代,A_k会收敛到上三角矩阵,其对角元素为特征值。结合移位策略(如Wilkinson移位),收敛速度大幅提升,几乎所有特征值求解器(如LAPACK的dgeev)都以此为核心。本工具可视化的是单步QR分解本身。

实际应用

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

有限元法的迭代求解器:大规模稀疏矩阵线性方程组的GMRES(广义最小残差)法在每次迭代中使用MGS进行Krylov子空间基向量的正交化。这是CFD和结构分析中Krylov求解器的核心,向量维数增大时古典Gram-Schmidt会发散,必须用MGS(或DGKS再正交化)。

特征值计算与PCA:主成分分析(PCA)和特征模态分析(模态分析)都用QR算法提取特征值。本工具演示的单次QR分解反复迭代至收敛到上三角矩阵,就能得到结构固有振动频率和机器学习特征提取所需的特征值。

传感器融合与卡尔曼滤波:平方根卡尔曼滤波通过直接更新协方差矩阵的Cholesky因子(或QR分解)来规避数值不稳定性。在GPS+IMU融合、机器人控制、航空航天姿态估计等需要同时满足实时性和数值稳定性的应用中,QR分解是关键技术。

常见误区与注意事项

最常见的误解是"QR分解只能用于正方矩阵"。实际上m×n(m≥n)的长方矩阵也直接适用,超定系统Ax=b(方程数m多于未知数n)的最小二乘解就是标准应用。本工具为了可视化便利采用3×3,但计算逻辑就是Modified Gram-Schmidt,扩展到长方矩阵只需改循环范围。实务中常见m=10000、n=10这样的纵长矩阵。

次常见误解是"Q是直交的,所以QᵀQ=I必然成立,数值计算中也当然成立"。理论上是,有限精度运算中必混入误差。本工具的"Q正交性误差"卡片约为10⁻¹⁵(倍精度机器精度)正说明Modified Gram-Schmidt极其优秀。古典Gram-Schmidt同样计算在条件数差的矩阵上,误差会跳到10⁻³以上。"正交性计算后必须验证"是铁律。

最后注意,本模拟器的矩阵是特殊形式,仅非对角元素固定。只能通过滑块调动A的3个对角元和b的第1分量,其他非对角元素设为数值稳定性好的值。真实应用中条件数超过10⁸的病态矩阵比比皆是,此时MGS的正交性误差也会增大。本工具用于概念理解和典型良条件问题的观察,极端病态问题应选Householder变换或SVD。

使用指南

  1. 通过滑块输入3×3矩阵A的对角元素(A11、A22、A33)。范围为-3到3的整数值
  2. 设置向量b的分量(B1等),执行Gram-Schmidt正交化法进行QR分解
  3. 计算结果的Q矩阵(直交矩阵)、R矩阵(上三角矩阵)、最小二乘解x自动显示
  4. 通过残差范数‖Ax-b‖₂和Q正交性误差‖QᵀQ-I‖_F验证数值精度

具体计算例

设想结构分析中的超定系统。A = [[4, 0, 1], [0, 3, 0], [2, 1, 2]]、b = [8, 6, 7]时,Gram-Schmidt法先正规化第1列,再计算第2列的直交分量。结果Q矩阵的列向量相互正交(内积≈0),R对角乘积 det(R) = 18。从Rx = Qᵀb回代得 x ≈ [1.833, 2.000, 0.667],残差‖Ax-b‖₂ ≈ 0(机器精度);A可逆时最小二乘解即为精确解。残差显著残留发生在方程数多于未知数的超定系统。

实务注意事项