QR分解

Posted 血影雪梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QR分解相关的知识,希望对你有一定的参考价值。

         本总结是是个人为防止遗忘而作,不得转载和商用。


         关于如何求一个矩阵A的特征向量X和特征值λ,在上学时我们通常使用如下方法:

                      AX =λX =λIX (I:单位阵)

                  => |A -λI| = 0

                  => 求出λ

                   =>代入AX =λX求出X

         但在实际应用中这样没啥实际价值,实践中一般使用Q·R分解。


QR分解

         对于m×n的列满秩矩阵A,必有:

                   Am*n= Qm*n·Rn*n

         其中,QT·Q=I(即Q为正交矩阵),R为非奇异上三角矩阵(即矩阵R的对角线下面的元素全为0)。

         这个将A分解成这样的矩阵Q和R的过程就是QR分解。

         其中当要求R的对角线元素为正时,该分解唯一。

         QR分解可用于求解矩阵A的特征值、A的逆等问题。

 

QR分解求特征值的过程:

         根据定义:Am*n= Qm*n·Rn*n,下面我们对该式做如下变换:

                    A = QR

                  => QTA = QTQR= R

                   =>QTAQ = RQ

         因为Q是正交阵,所以QTAQ的特征值不发生变化,所以想办法求出RQ的特征值就OK了。

         现在我们令A1= RQ,然后对A1做QR分解,得出A1 = Q2R2,然后同上令A2= R2Q2,就向这样一直进行下去最后求出An时,An就是一个“只有对角线上有值其他都为0的矩阵”,即:求出A的特征值了。

         文字描述就是上面了,用数学表述其过程就是:

                   A= QR  =>  A1 = QTAQ  => RQ

                   ...

                   Ak= QkRk  =>  Ak+1 = RkQk

                   ...

                   Ak-> diagλ12, ...λn

 

         PS:

                   1,一般实践中不会直接做QR分解,因为下面的代码中那么一个简单的矩阵都经过了十几次迭代才收敛。实践中往往先把一个矩阵A通过HouseHolder变换做成上Hessenberg矩阵,然后通过Givens变换做QR分解。

                   2,和QR分解的还有Schmidt正交化,感兴趣的可以去查查。


代码

         代码源自皱博老师,我就直接截图了:

                  

                    开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于QR分解的主要内容,如果未能解决你的问题,请参考以下文章

QR分解与最小二乘(转载自AndyJee)

机器学习中的矩阵方法03:QR 分解

机器学习中的矩阵分解LU分解QR分解SVD分解

矩阵分解---QR正交分解,LU分解

matlab的QR分解函数QR()

matlab QR分解用啥算法实现的