构造标准正交基
标准正交的列是矩阵所能拥有的最“听话”的列:QTQ=I,所以 Q 保持长度和角度,从不放大误差。格拉姆-施密特方法能把任意线性无关的列 a1,…,an 变成标准正交的列:取 q1=a1/∥a1∥,之后对每一列减去它在已得各 q 上的投影,再把剩下的部分归一化。
A=QR,Rij=qi⋅aj (i≤j),qj=Rjjaj−∑i<jRijqi(1) 把用到的数记录下来就得到 QR 分解:Q 是标准正交的列,R 是上三角矩阵,其元素 Rij=qi⋅aj,对角线上是长度 Rjj。对最小二乘,∥Ax−b∥=∥QRx−b∥ 由 Rx^=QTb 取得最小,这是一个用回代法求解的三角方程组,全程不构造 ATA。因此条件数是 κ(R)=κ(A),而不是 κ(A)2。
对两列做格拉姆-施密特取
A=(3412),两列为
a1=(3,4) 和
a2=(1,2)。则
R11=∥a1∥=5,
q1=(0.6,0.8)。接着
R12=q1⋅a2=2.2,
a2−2.2q1=(−0.32,0.24) 的长度为
R22=0.4,所以
q2=(−0.8,0.6)。于是
Q=(0.60.8−0.80.6),
R=(502.20.4)。验证:
detA=2=detR。
- Q:标准正交列,QTQ=I,不放大误差。
- R:上三角矩阵;对角线上是去掉之前各方向后剩下的长度。
- 修正格拉姆-施密特(库中用豪斯霍尔德反射)在浮点运算中能保持 Q 的正交性;教科书版本遇到近乎相关的列会丢失正交性。
为什么库用 QR 做回归金融中的回归变量常常近乎共线(许多相关因子、多项式特征)。正规方程会把这个条件数平方,并悄无声息地返回无意义的结果,而 QR(或 SVD)能应付。这正是 NumPy 和 statsmodels 的最小二乘例程背后的算法,也是你将在综合项目中亲手实现的算法。
实验:评分内容
- 第一个对角元素10 分
- 矩阵 Q20 分
- 矩阵 R20 分
- 由 R 求行列式15 分
- 用 QR 做最小二乘15 分
- 为什么 QR 更精确20 分