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正交化,感兴趣的可以去查查。


代码

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

                  

                   

猜你喜欢

转载自blog.csdn.net/u011089523/article/details/79940607