5.9 QR分解–Gram-Schmidt 分解

最小二乘法需要解方程 ATAx=ATbA^TA\mathbf{x} = A^T\mathbf{b}ATAx=ATb ,需要计算矩阵乘法 ATAA^TAATA ,然后再高斯消元法解普通方程,缺点有两个,一是效率比较低,因为需要计算矩阵乘法 ATAA^TAATA,二是不稳定,当矩阵 AAA 列向量接近线性相关时,矩阵 ATAA^TAATA 列向量会更接近线性相关,更病态,导致高斯消元法极不稳定,为此稳健最小二乘法和正则化方法都是克服这点的。还有一种方法,利用QR分解可以同时克服上面两个缺点,即可以高效率的稳定求出最小二乘解。

第一章指出,线性空间存在标准正交基,任意子空间都存在标准正交基的子集,该子集张成子空间。令标准正交基的子集为矩阵 Qmn,m>nQ_{mn},m>nQmn​,m>n ,注意不是方阵,要与正交矩阵 QmmQ_{mm}Qmm​ 进行区分,正交矩阵是方阵。由于矩阵 QmnQ_{mn}Qmn​ 每个列向量都是单位向量且两两正交,所以 QmnTQmn=EnnQ^T_{mn}Q_{mn} = E_{nn}QmnT​Qmn​=Enn​ 是单位阵。注意 QmnQmnT≠EmmQ_{mn}Q^T_{mn} \ne E_{mm}Qmn​QmnT​​=Emm​ ,这也是和正交矩阵的区别,正交矩阵 QmmQ_{mm}Qmm​ 满足:QmmTQmm=E,QmmQmmT=EQ^T_{mm}Q_{mm}=E,Q_{mm}Q^T_{mm}=EQmmT​Qmm​=E,Qmm​QmmT​=E 。为了简化符号,本节 QQQ 不是正交矩阵,而是矩阵 Qmn,m>nQ_{mn},m>nQmn​,m>n 。

因为 QTQ=EQ^TQ = EQTQ=E,所以矩阵 QQQ 的左逆为 QTQ^TQT ,投影矩阵为 P=QQTP=QQ^TP=QQT ,都不涉及逆矩阵,只有矩阵转置,十分简单。矛盾方程 Qx=bQ\mathbf{x} = \mathbf{b}Qx=b 的解可以直接得到 x^=QTb\mathbf{\hat{x}} = Q^T\mathbf{b}x^=QTb ,这就是最小二乘解。残差向量为 b−QQTb=(E−QQT)b\mathbf{b}-QQ^T\mathbf{b}=(E-QQ^T)\mathbf{b}b−QQTb=(E−QQT)b ,矩阵 E−QQTE-QQ^TE−QQT 称为残差矩阵。

对于列满秩矩阵 AAA ,取张成子空间中标准正交向量,组成矩阵 QQQ ,注意有无穷多种取法。例如三维空间中任意二维子空间即平面,取平面内任意两个垂直的单位向量组成的矩阵即是 QQQ 。矩阵 AAA 任一列向量 ai\mathbf{a}_iai​ ,方程 Qx=aiQ \mathbf{x}= \mathbf{a}_iQx=ai​ 都存在解 x=QTai\mathbf{x} = Q^T\mathbf{a}_ix=QTai​ ,因为向量 ai\mathbf{a}_iai​ 位于子空间内,所以解是精确解,是严格相等的。则矩阵方程 QR=AQR=AQR=A ,矩阵 RRR 每个列向量为对应方程的精确解,所以矩阵 RRR 唯一,注意其尺寸为 n×nn \times nn×n 是方阵。根据矩阵乘积的秩小于每个矩阵的秩,得 n=rankA≤rankRn = rank A \le rank Rn=rankA≤rankR ,又因为 rankR≤nrank R \le nrankR≤n ,所以 rankR=nrank R = nrankR=n ,即方阵 RRR 满秩,是可逆矩阵。方程 Ax=bA\mathbf{x} = \mathbf{b}Ax=b 带入 QR=AQR=AQR=A 得 QRx=bQR\mathbf{x} = \mathbf{b}QRx=b ,所以 Rx=QTbR\mathbf{x} = Q^T\mathbf{b}Rx=QTb 得 x^=R−1QTb\mathbf{\hat{x}} = R^{-1}Q^T\mathbf{b}x^=R−1QTb 为最小二乘解。由于需要求逆矩阵 R−1R^{-1}R−1,效率比较低。由于矩阵 QQQ 有无穷多种取法,那有没有一种取法,使矩阵 RRR 为上三角阵,则逆矩阵 R−1R^{-1}R−1 很容易求得?答案是肯定的。

定义 矩阵QR分解 列满秩矩阵 AAA 分解为 A=QRA=QRA=QR ,其中矩阵 QQQ 每个列向量都是单位向量且两两正交,即满足 QTQ=EQ^TQ=EQTQ=E,矩阵 RRR 为上三角阵,对角元素均为正数,可逆。此时左逆为 R−1QTR^{-1}Q^TR−1QT ,投影矩阵为 QQTQQ^TQQT 。

Gram-Schmidt 分解

下面求解矩阵QR分解的矩阵 QQQ 和矩阵 RRR 。因为 A=QRA=QRA=QR ,则 [a1,⋯,an]=[q1,⋯,qn][r1,⋯,rn][ \mathbf{a}_1,\cdots,\mathbf{a}_n] = [ \mathbf{q}_1,\cdots,\mathbf{q}_n] [ \mathbf{r}_1,\cdots,\mathbf{r}_n][a1​,⋯,an​]=[q1​,⋯,qn​][r1​,⋯,rn​] ,所以 a1=[q1,⋯,qn]r1\mathbf{a}_1 = [ \mathbf{q}_1,\cdots,\mathbf{q}_n] \mathbf{r}_1a1​=[q1​,⋯,qn​]r1​ ,因为 RRR 是上三角阵,所以 ri1=0,i>1r_{i1} = 0, i>1ri1​=0,i>1 ,则 a1=q1r11\mathbf{a}_1 = \mathbf{q}_1 r_{11}a1​=q1​r11​ ,因为 q1\mathbf{q}_1q1​ 是单位向量,所以对向量 a1\mathbf{a}_1a1​ 进行单位化可得 r11=∥a1∥r_{11} = \|\mathbf{a}_1\|r11​=∥a1​∥ ,向量 q1=a1/r11\mathbf{q}_1 = \mathbf{a}_1/r_{11}q1​=a1​/r11​ 。

同理,a2=[q1,⋯,qn]r2\mathbf{a}_2 = [ \mathbf{q}_1,\cdots,\mathbf{q}_n] \mathbf{r}_2a2​=[q1​,⋯,qn​]r2​ ,因为 RRR 是上三角阵,所以 ri2=0,i>2r_{i2} = 0, i>2ri2​=0,i>2 ,则 a2=q1r12+q2r22\mathbf{a}_2 = \mathbf{q}_1 r_{12} + \mathbf{q}_2 r_{22}a2​=q1​r12​+q2​r22​ ,因为 qi\mathbf{q}_iqi​ 是单位向量且两两正交,采用向量 q1\mathbf{q}_1q1​ 取内积得 q1Ta2=q1Tq1r12+q1Tq2r22\mathbf{q}^T_1\mathbf{a}_2 = \mathbf{q}^T_1\mathbf{q}_1 r_{12} +\mathbf{q}^T_1 \mathbf{q}_2 r_{22}q1T​a2​=q1T​q1​r12​+q1T​q2​r22​ ,因为 q1Tq2=0,q1Tq1=1\mathbf{q}^T_1 \mathbf{q}_2 = 0, \mathbf{q}^T_1\mathbf{q}_1=1q1T​q2​=0,q1T​q1​=1 ,所以 r12=q1Ta2r_{12} = \mathbf{q}^T_1\mathbf{a}_2r12​=q1T​a2​ 。所以 a2−q1r12=q2r22\mathbf{a}_2 - \mathbf{q}_1 r_{12} = \mathbf{q}_2 r_{22}a2​−q1​r12​=q2​r22​ 得 r22=∥a2−q1r12∥r_{22} = \|\mathbf{a}_2 - \mathbf{q}_1 r_{12} \|r22​=∥a2​−q1​r12​∥ ,q2=(a2−q1r12)/r22\mathbf{q}_2 = (\mathbf{a}_2 - \mathbf{q}_1 r_{12})/r_{22}q2​=(a2​−q1​r12​)/r22​。

同理对任意列向量 ai=[q1,⋯,qn]ri\mathbf{a}_i = [ \mathbf{q}_1,\cdots,\mathbf{q}_n] \mathbf{r}_iai​=[q1​,⋯,qn​]ri​ ,因为 RRR 是上三角阵,所以 rji=0,j>ir_{ji} = 0, j>irji​=0,j>i ,则 ai=q1r1i+q2r2i+⋯+qirii\mathbf{a}_i = \mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots + \mathbf{q}_i r_{ii}ai​=q1​r1i​+q2​r2i​+⋯+qi​rii​ ,因为 qi\mathbf{q}_iqi​ 是单位向量且两两正交,采用向量 qj,j<i\mathbf{q}_j,j < iqj​,j<i 取内积得 qjTai=qjTq1r1i+qjTq2r2i+⋯+qjTqirii\mathbf{q}^T_j\mathbf{a}_i = \mathbf{q}^T_j\mathbf{q}_1 r_{1i} + \mathbf{q}^T_j\mathbf{q}_2 r_{2i} + \cdots + \mathbf{q}^T_j\mathbf{q}_i r_{ii}qjT​ai​=qjT​q1​r1i​+qjT​q2​r2i​+⋯+qjT​qi​rii​ ,因为 qjTqk=0(j≠k),qjTqj=1\mathbf{q}^T_j \mathbf{q}_k = 0 (j \ne k), \mathbf{q}^T_j\mathbf{q}_j=1qjT​qk​=0(j​=k),qjT​qj​=1 ,所以 rji=qjTai,j<ir_{ji} = \mathbf{q}^T_j\mathbf{a}_i, j < irji​=qjT​ai​,j<i 。所以 ai−(q1r1i+q2r2i+⋯)=qirii\mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots) = \mathbf{q}_i r_{ii}ai​−(q1​r1i​+q2​r2i​+⋯)=qi​rii​ 得 rii=∥ai−(q1r1i+q2r2i+⋯)∥r_{ii} = \|\mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots) \|rii​=∥ai​−(q1​r1i​+q2​r2i​+⋯)∥ ,qi=(ai−(q1r1i+q2r2i+⋯))/rii\mathbf{q}_i = (\mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots))/r_{ii}qi​=(ai​−(q1​r1i​+q2​r2i​+⋯))/rii​。采用向量 qi\mathbf{q}_iqi​ 取内积得 qiTai=qiTq1r1i+qiTq2r2i+⋯+qiTqirii\mathbf{q}^T_i\mathbf{a}_i = \mathbf{q}^T_i\mathbf{q}_1 r_{1i} + \mathbf{q}^T_i\mathbf{q}_2 r_{2i} + \cdots + \mathbf{q}^T_i\mathbf{q}_i r_{ii}qiT​ai​=qiT​q1​r1i​+qiT​q2​r2i​+⋯+qiT​qi​rii​ ,可得 rii=qiTair_{ii} = \mathbf{q}^T_i\mathbf{a}_irii​=qiT​ai​ ,这个计算方式形式上和 rjir_{ji}rji​ 统一。

一直计算,直到 i=ni=ni=n 结束。

该正交化方法就是Gram-Schmidt方法。该方法具有明显的几何图像,向量组 (q1,⋯,qn)(\mathbf{q}_1,\cdots,\mathbf{q}_n)(q1​,⋯,qn​) 可看作空间的坐标轴,则 rji=qjTai,j<ir_{ji} = \mathbf{q}^T_j\mathbf{a}_i, j < irji​=qjT​ai​,j<i 是列向量 ai\mathbf{a}_iai​ 在坐标轴 qjT\mathbf{q}^T_jqjT​ 的投影值,即坐标值。qirii=ai−(q1r1i+q2r2i+⋯)\mathbf{q}_i r_{ii} = \mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots)qi​rii​=ai​−(q1​r1i​+q2​r2i​+⋯) 是列向量 ai\mathbf{a}_iai​ 减去各个坐标轴投影分量,或者说 (q1r1i+q2r2i+⋯)(\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots)(q1​r1i​+q2​r2i​+⋯) 是列向量 ai\mathbf{a}_iai​ 向坐标轴 (q1,⋯,qi−1)(\mathbf{q}_1,\cdots,\mathbf{q}_{i-1})(q1​,⋯,qi−1​) 张成子空间的投影分量,所以 qirii\mathbf{q}_i r_{ii}qi​rii​ 是列向量 ai\mathbf{a}_iai​ 垂直于由坐标轴 (q1,⋯,qi−1)(\mathbf{q}_1,\cdots,\mathbf{q}_{i-1})(q1​,⋯,qi−1​) 张成子空间的分量,riir_{ii}rii​ 是该分量的长度,qi\mathbf{q}_iqi​ 是该分量的单位化向量。如果想象有个超长方体正好包围矩阵 AAA 的列向量,则 riir_{ii}rii​ 就是长方体的各边长度,qi\mathbf{q}_iqi​ 是长方体的各边向量的方向。而且如果长方体有个边长很短,趋近 000 ,则矩阵 RRR 是病态的,从而矩阵 AAA 是病态的,方程 Ax=bA\mathbf{x} = \mathbf{b}Ax=b 解不稳定。因为 x^=R−1QTb\mathbf{\hat{x}} = R^{-1}Q^T\mathbf{b}x^=R−1QTb ,假设 rii→0r_{ii} \to 0rii​→0 ,则 x^i=((QTb)i−∑j=ni+1((QTb)jx^j))/rii\hat{x}_i = ((Q^T\mathbf{b})_i - \sum^{i+1}_{j=n} ((Q^T\mathbf{b})_j\hat{x}_j))/r_{ii}x^i​=((QTb)i​−∑j=ni+1​((QTb)j​x^j​))/rii​ ,除以趋于 000 的数,x^i\hat{x}_ix^i​ 会很不稳定。

通过上面计算过程可以发现,矩阵的 QRQRQR 分解是唯一的,因为计算每个 rji,qir_{ji},\mathbf{q}_irji​,qi​ 都是唯一的。也可以不通过计算过程证明唯一性。假设不唯一,则存在两个分解即 A=QR=Q′R′A=QR=Q'R'A=QR=Q′R′ ,则 B=Q′TQ=R′R−1B=Q'^TQ=R'R^{-1}B=Q′TQ=R′R−1 ,B=Q′TQB=Q'^TQB=Q′TQ 是正交阵,则 BT=B−1B^T=B^{-1}BT=B−1 ,因为上三角阵乘积是上三角阵,所以 B=R′R−1B=R'R^{-1}B=R′R−1 是上三角阵,上三角阵的逆矩阵也是上三角阵,所以 B−1B^{-1}B−1 是上三角阵,则 BTB^TBT 是上三角阵,所以 BBB 是下三角阵。这说明 BBB 即是上三角阵,又是下三角阵,则只能是对角阵,对角元素等于 rii/rii′r_{ii}/r'_{ii}rii​/rii′​ ,因为 rii,rii′r_{ii},r'_{ii}rii​,rii′​ 都是正数,所以对角元素都是正数。又 BBB 是正交矩阵,则只能是单位阵,故 E=Q′TQ=R′R−1E=Q'^TQ=R'R^{-1}E=Q′TQ=R′R−1 ,则 Q′=Q,R′=RQ'=Q,R'=RQ′=Q,R′=R ,故分解唯一。

Gram-Schmidt方法的优点是十分直观,几何图像很清晰,缺点是矩阵 QQQ 不是特别正交,因为数值舍入误差(计算机存储实数时采用有限位数,所以有舍入误差),会导致 qi\mathbf{q}_iqi​ 偏离理论值,特别的 qi=(ai−(q1r1i+q2r2i+⋯))/rii\mathbf{q}_i = (\mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots))/r_{ii}qi​=(ai​−(q1​r1i​+q2​r2i​+⋯))/rii​ ,当 rii→0r_{ii} \to 0rii​→0 ,舍入误差导致 qi\mathbf{q}_iqi​ 出现较大误差,导致 qj,j>i\mathbf{q}_j,j>iqj​,j>i 与 qi\mathbf{q}_iqi​ 不正交,使矩阵 QTQ−EQ^TQ-EQTQ−E 偏离零矩阵较大。Gram-Schmidt分解由于舍入误差导致不稳定,从而导致最优解 x^=R−1QTb\mathbf{\hat{x}} = R^{-1}Q^T\mathbf{b}x^=R−1QTb 不稳定,特别当矩阵 AAA 接近病态时更严重。

当矩阵 AAA 是可逆矩阵时,可逆矩阵显然是列满秩矩阵,故存在QR分解,此时 QQQ 是正交矩阵,投影矩阵为 P=QQT=EP=QQT=EP=QQT=E 是单位矩阵!方程解为 QRx=b,x=R−1QTbQR\mathbf{x}=\mathbf{b},\mathbf{x}=R^{-1}Q^T\mathbf{b}QRx=b,x=R−1QTb ,矩阵 AAA 的逆矩阵为 A−1=R−1QTA^{-1}=R^{-1}Q^TA−1=R−1QT 。

改进 Gram-Schmidt 分解

上面的Gram-Schmidt分解称为经典Gram-Schmidt分解,矩阵 RRR 是按列计算的,其实仔细观察计算公式 rji=qjTai,j<ir_{ji} = \mathbf{q}^T_j\mathbf{a}_i, j < irji​=qjT​ai​,j<i ,因为 ai\mathbf{a}_iai​ 已知,只要知道了 qjT\mathbf{q}^T_jqjT​ ,是可以得到整行 rji,i=1,⋯,nr_{ji},i=1,\cdots,nrji​,i=1,⋯,n ,可以按行计算。

改进Gram-Schmidt分解就是矩阵 RRR 是按行计算,即先计算 r11=∥a1∥r_{11} = \|\mathbf{a}_1\|r11​=∥a1​∥ ,向量 q1=a1/r11\mathbf{q}_1 = \mathbf{a}_1/r_{11}q1​=a1​/r11​ ,计算 r1i=q1Tai,i=2,⋯,nr_{1i} = \mathbf{q}^T_1\mathbf{a}_i,i=2,\cdots,nr1i​=q1T​ai​,i=2,⋯,n 。

接着计算 r22=∥a2−q1r12∥r_{22} = \|\mathbf{a}_2 - \mathbf{q}_1 r_{12} \|r22​=∥a2​−q1​r12​∥ ,q2=(a2−q1r12)/r22\mathbf{q}_2 = (\mathbf{a}_2 - \mathbf{q}_1 r_{12})/r_{22}q2​=(a2​−q1​r12​)/r22​ ,计算 r2i=q2Tai,i=3,⋯,nr_{2i} = \mathbf{q}^T_2\mathbf{a}_i,i=3,\cdots,nr2i​=q2T​ai​,i=3,⋯,n 。

接着计算 rii=∥ai−(q1r1i+q2r2i+⋯)∥r_{ii} = \|\mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots) \|rii​=∥ai​−(q1​r1i​+q2​r2i​+⋯)∥ ,qi=(ai−(q1r1i+q2r2i+⋯))/rii\mathbf{q}_i = (\mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots))/r_{ii}qi​=(ai​−(q1​r1i​+q2​r2i​+⋯))/rii​,计算 rij=qiTaj,j=i+1,⋯,nr_{ij} = \mathbf{q}^T_i\mathbf{a}_j,j=i+1,\cdots,nrij​=qiT​aj​,j=i+1,⋯,n 。

一直计算,直到 i=ni=ni=n 结束。

如果这样计算,改进Gram-Schmidt分解和经典Gram-Schmidt分解结果一致,只是计算顺序不同而以,效果不会有任何改进。观察 qi=(ai−(q1r1i+q2r2i+⋯))/rii\mathbf{q}_i = (\mathbf{a}_i - (\mathbf{q}_1 r_{1i} + \mathbf{q}_2 r_{2i} + \cdots))/r_{ii}qi​=(ai​−(q1​r1i​+q2​r2i​+⋯))/rii​ ,需要减去 qjrji,j<i\mathbf{q}_j r_{ji},j < iqj​rji​,j<i ,这些量都是提前计算好的,当它们计算好后,立即减去这些量,就是改进Gram-Schmidt分解。具体为:

即先计算 r11=∥a1∥r_{11} = \|\mathbf{a}_1\|r11​=∥a1​∥ ,向量 q1=a1/r11\mathbf{q}_1 = \mathbf{a}_1/r_{11}q1​=a1​/r11​ ,计算 r1i=q1Tai,i=2,⋯,nr_{1i} = \mathbf{q}^T_1\mathbf{a}_i,i=2,\cdots,nr1i​=q1T​ai​,i=2,⋯,n ,注意此时必须计算 ai=ai−q1r1i,i=2,⋯,n\mathbf{a}_i = \mathbf{a}_i - \mathbf{q}_1 r_{1i}, i=2,\cdots,nai​=ai​−q1​r1i​,i=2,⋯,n 。令 b0=b\mathbf{b}_0=\mathbf{b}b0​=b ,注意对向量 b\mathbf{b}b 也要同样处理,即令 δ1=q1Tb\delta_1 = \mathbf{q}^T_1\mathbf{b}δ1​=q1T​b ,b=b−q1δ1\mathbf{b} = \mathbf{b} - \mathbf{q}_1\delta_1b=b−q1​δ1​ 。

接着计算 r22=∥a2∥r_{22} = \|\mathbf{a}_2\|r22​=∥a2​∥ ,q2=a2/r22\mathbf{q}_2 = \mathbf{a}_2/r_{22}q2​=a2​/r22​ ,计算 r2i=q2Tai,i=3,⋯,nr_{2i} = \mathbf{q}^T_2\mathbf{a}_i,i=3,\cdots,nr2i​=q2T​ai​,i=3,⋯,n ,注意此时必须计算 ai=ai−q2r2i,i=3,⋯,n\mathbf{a}_i = \mathbf{a}_i - \mathbf{q}_2 r_{2i}, i=3,\cdots,nai​=ai​−q2​r2i​,i=3,⋯,n 。注意对向量 b\mathbf{b}b 也要同样处理,即令δ2=q2Tb\delta_2 = \mathbf{q}^T_2\mathbf{b}δ2​=q2T​b , b=b−q2δ2\mathbf{b} = \mathbf{b} - \mathbf{q}_2 \delta_2b=b−q2​δ2​ 。

接着计算 rii=∥ai∥r_{ii} = \|\mathbf{a}_i\|rii​=∥ai​∥ ,qi=ai/rii\mathbf{q}_i = \mathbf{a}_i/r_{ii}qi​=ai​/rii​,计算 rij=qiTaj,j=i+1,⋯,nr_{ij} = \mathbf{q}^T_i\mathbf{a}_j,j=i+1,\cdots,nrij​=qiT​aj​,j=i+1,⋯,n ,注意此时必须计算 aj=aj−qirij,j=i+1,⋯,n\mathbf{a}_j = \mathbf{a}_j - \mathbf{q}_i r_{ij}, j=i+1,\cdots,naj​=aj​−qi​rij​,j=i+1,⋯,n 。注意对向量 b\mathbf{b}b 也要同样处理,即令δi=qiTb\delta_i = \mathbf{q}^T_i\mathbf{b}δi​=qiT​b , b=b−qiδi\mathbf{b} = \mathbf{b} - \mathbf{q}_i\delta_ib=b−qi​δi​ 。

一直计算,直到 i=ni=ni=n 结束。

令向量 d=(δ1,⋯,δm)\mathbf{d} = (\delta_1,\cdots,\delta_m)d=(δ1​,⋯,δm​) ,因为 d=QTb0\mathbf{d} = Q^T\mathbf{b}_0d=QTb0​ ,则最优近似解为 x^=R−1d\mathbf{\hat{x}} = R^{-1}\mathbf{d}x^=R−1d ,即 x^i=(δi−∑j=i+1n(δjx^j))/rii\hat{x}_i = (\delta_i - \sum^{n}_{j=i+1} (\delta_j\hat{x}_j))/r_{ii}x^i​=(δi​−∑j=i+1n​(δj​x^j​))/rii​。此时残差平方和为 ∥b∥2\|\mathbf{b}\|^2∥b∥2 ,因为 b\mathbf{b}b 为 b0\mathbf{b}_0b0​ 减去AAA 子空间的投影。

改进Gram-Schmidt分解理论上和经典Gram-Schmidt分解结果一致,数学上是一样的。但是改进Gram-Schmidt分解不易受舍入误差影响,获得的正交矩阵 QQQ 更正交,使矩阵 QTQ−EQ^TQ-EQTQ−E 偏离零矩阵较小,最优解 x^=R−1QTb\mathbf{\hat{x}} = R^{-1}Q^T\mathbf{b}x^=R−1QTb 更稳定。为什么呢?注意到 aj=aj−qirij,j=i+1,⋯,n\mathbf{a}_j = \mathbf{a}_j - \mathbf{q}_i r_{ij}, j=i+1,\cdots,naj​=aj​−qi​rij​,j=i+1,⋯,n ,qirij\mathbf{q}_i r_{ij}qi​rij​ 是向量 aj\mathbf{a}_jaj​ 位于 $\mathbf{q}_i $ 投影,aj\mathbf{a}_jaj​ 减去投影分量后垂直于向量 qi\mathbf{q}_iqi​ ,所以立即减去投影分量后,新的 aj\mathbf{a}_jaj​ 都垂直于 qi\mathbf{q}_iqi​ ,这样它们就是正交的,后面计算的qj,j>i\mathbf{q}_j,j>iqj​,j>i 都与 qi\mathbf{q}_iqi​ 正交,qi\mathbf{q}_iqi​ 的误差不会传导到后面。

Gram-Schmidt QR分解与高斯消元法对比

当矩阵 AAA 为方阵时,QR分解与高斯消元法都能解方程,它们的差别为:首先计算量上,高斯消元法更少,QR分解更多。其次,在数值稳定上,如果矩阵 AAA 接近病态时,QR分解得到的最优解要比高斯消元法的好很多。不严谨可以简单比较,因为根据QR分解 qi=ai/rii\mathbf{q}_i = \mathbf{a}_i/r_{ii}qi​=ai​/rii​ ,除数是向量 ai\mathbf{a}_iai​ 的长度 riir_{ii}rii​,而高斯消元法的除数是主元,只是向量 ai\mathbf{a}_iai​ 的第 iii 个分量 aiia_{ii}aii​ ,比 riir_{ii}rii​ 更小,除数越小,计算越不稳定。最后,高斯消元法当 aiia_{ii}aii​ 为 000 时,需要进行行对调操作即选主元,即选择 aji,j=i,⋯,ma_{ji},j=i,\cdots,maji​,j=i,⋯,m 最大值为主元,然后对调行,可以改善解质量。QR分解也可以选择 ∥aj∥,j>i\|\mathbf{a}_j\|,j>i∥aj​∥,j>i 最大值为主元,然后对调列,但计算模拟表明解质量的改善很小,或者没有。

总之,如果矩阵 AAA 接近病态时,采用改进Gram-Schmidt分解法,否则可以采用高斯消元法(加上必要的选主元)。

5.9 QR分解--Gram-Schmidt 分解相关推荐

  1. java 矩阵分解_计算方法(三)矩阵分解1-正交分解(QR分解)

    正交分解 矩阵的正交分解又称为QR分解,是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式. 任意实数方阵A,都能被分解为 .这里的Q为正交单位阵,即 R是一个上三角矩阵.这种分解被称为QR分解 ...

  2. 计算方法(三)矩阵分解1-正交分解(QR分解)

    为什么80%的码农都做不了架构师?>>>    正交分解 矩阵的正交分解又称为QR分解,是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式. 任意实数方阵A,都能被分解为 .这 ...

  3. 人工智能里的数学修炼 | 矩阵的花样分解:特征值分解(EVD)、相似对角化、QR分解、Schur分解、奇异值分解(SVD)的概念纠缠与详解

    前言 在高等代数里,矩阵分解是一个十分基础与重要的内容,任何一个学校对于理工科的研究生教育都会开设相应的课程,如:矩阵分析.矩阵论.线性系统等.看了不少社区的问答.笔记和博客,在它们的基础上加入一些自 ...

  4. 几种矩阵分解算法: LU分解,Cholesky分解,QR分解,SVD分解,Jordan分解

    目录 1.LU分解 2. LDLT分解法 3. Cholesky分解的形式 4. QR分解 5.SVD分解 5.1 SVD与广义逆矩阵 6. Jordan 分解 参考文章: ---------我只是搬 ...

  5. QR分解、RQ分解与SVD

    QR分解.RQ分解与SVD分解整理 1.QR分解 QR分解将一个m x m的矩阵A分解为一个正交矩阵Q与一个上三角阵R之积.常常利用Householder变换来进行QR分解的计算. Household ...

  6. 代码:matlab求QR分解,QL分解,LQ分解和RQ分解。

    Matlab的命令里只有QR分解,如何求QL分解和LQ,RQ分解? LQ分解:  [Q 1,R 1]= qr (H');  H=(Q 1*R 1)'=R 1' *Q 1'=L*Q;  所以下三角阵L= ...

  7. 解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解

    文章目录 1. 前言 2. LU三角分解 3. Cholesky分解 - LDLT分解 4. Cholesky分解 - LLT分解 5. QR分解 6. 奇异值分解 7. 特征值分解 1. 前言 本博 ...

  8. 视觉SLAM中的数学——解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解

    前言 本博客主要介绍在SLAM问题中常常出现的一些线性代数相关的知识,重点是如何采用矩阵分解的方法,求解线性方程组AX=B.主要参考了<计算机视觉--算法与应用>附录A以及Eigen库的方 ...

  9. 怎样用matlab做矩阵的LU分解,矩阵LU分解程序实现(Matlab)

    n=4;%确定需要LU分解的矩阵维数 %A=zeros(n,n); L=eye(n,n);P=eye(n,n);U=zeros(n,n);%初始化矩阵 tempU=zeros(1,n);tempP=z ...

  10. 用MATLAB实现plu分解,编制计算给定矩阵 A 的 LU 分解和 PLU 分解的通用程序

    用VB编写一个程序,计算出给定的10*10矩阵(存放在二维数组A中)每行元素的最大值和每列元素的最小值 ModuleModule1SubMain()DimA(,)AsInteger={{1,2,3,4 ...

最新文章

  1. tensorflow gan 网络 示例
  2. 关于CALayer的contentsGravity属性
  3. 使用outlet在SAP Spartacus中添加自定义UI
  4. 大数据计算服务MaxCompute行业开发应用案例
  5. maven常用插件配置
  6. ppt中流程图旁边怎么添加_辅食中的黑芝麻酱怎么添加呢?
  7. html5编写商城页面,HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第2章HTML基础知识...
  8. C#连接oracle数据库提示ORA-12154: TNS: 无法解析指定的连接标识符
  9. 微信小程序代码大全 - 小程序开发福利
  10. 软件设计师真题知识点笔记❀
  11. html如何画出四个圆圈,css3如何绘制一个圆圆的loading转圈动画
  12. Ae 效果快速参考:Keylight(1.2)
  13. HTTPS 中双向认证SSL 协议的具体过程
  14. 1:算法php/go [反转链表;LRU缓存结构 ;判断链表中是否有环]
  15. Nacos学习之初识Nacos
  16. rknn3399pro 2小时入门指南(二)RKNN刷机攻略详解
  17. 我的收藏----壁纸
  18. 太妙了!几个用Python给图片添加水印的方法,简单实用!
  19. 程序员的表白: 教你制作一个百分之99成功率的表白网站 (html+css+js)
  20. 笔记本电脑使用电池时屏幕不停的更改亮度 - 解决方案

热门文章

  1. [75] Making arrangements
  2. Vue项目实战03 : vue中 meta 路由元信息
  3. EnforceLearning:迁移学习-监督训练与非监督训练
  4. CNN:测试一下YoloV3
  5. ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
  6. **PCD数据获取:Kinect+OpenNI+PCL对接(代码)
  7. 京东B2B业务架构演变阅读心得
  8. 华三实现vlan通过
  9. [Android] Implementation vs API dependency
  10. 系统ghost后变成一个盘了别的分区的文件怎么找回