利用QR算法求解矩阵的特征值和特征向量

利用QR算法求解矩阵的特征值和特征向量

为了求解一般矩阵(不是那种幼稚到shi的2 x 2矩阵)的特征值.
根据定义的话,很可能需要求解高阶方程...
这明显是个坑...高阶方程你肿么破...

折腾了好久
1.我要求特征值和特征向量.
2.找到一种算法QR分解矩阵求解特征值
3.QR矩阵分解需要Gram-schimidt正交化分解

有一种很明显的感觉,往往在现在很难有 很系统 很深入 的学习某一个学科的某一门知识.
往往学的时候"靠,学这东西有什么用""学了这么久,也不知道怎么用,不想学"
到后来要解决问题的时候,要解决问题很可能这个问题里包含其他子问题,自问题里又有自问题,一层层的递归下去,直到解决所有子问题,才能递归回去,解决我们最初想搞定的问题.

这里写图片描述

又会懊恼,没有很系统的学习过那门知识.

骚年,Hold 住,你能递归的去死磕一个问题多深,如果你能安全的返回到原来你最初想要解决的问题,没有"爆栈",那么这个深度就代表你的学习能力.深度越深,学习能力是越强的.人不可能一直拥有一个足够舒适的环境去系统的把所有东东都搞定,不可能把所有的基础知识都搞定了再上项目,去解决实际问题.在实际问题中发现问题,解决问题,才是真真的学习能力!!!不是TM卷子上多少分!给朕Hold住!


啊,呼喊万能的wiki帝
http://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors

先回顾一下对于一般的矩阵求特征值是怎么破的

这里写图片描述

你会发现,上帝啊,这家伙要求解方程...一般的二阶方程可能还能搞得定,但是矩阵的规模一大,高阶方程就坑爹了,你去求解高阶方程组?两个字,呵呵.

当前我找到的可行解是矩阵的QR算法.

这里写图片描述

其实也没有什么难的,就是一次次的迭代,对矩阵A做QR分解,然后由于Q是个正交阵他的逆和转置是一样的,所以你会看到上面图中的公式推到.
迭代次数足够多的时候,可以得到足够接近矩阵特征值的数值解.

再次强调,计算机只能求解数值解,不能求解析解.

    def eig(self, A) :
        if A is None :
            return

        for i in range(0, 20) :
            (Q, R) = self.qr_decomposition(A)
            A = self.multiply(R, Q)
        return A

对角线上的就是矩阵的特征值
这里写图片描述

找到特征值之后根据

Ax=βx

然后对 Aβ 矩阵求逆即可

这里写图片描述
输出的第一个矩阵的对角线上的都是特征值
函数实现:

    def eig(self, A) :
        if A is None :
            return

        tmp_mat = copy.deepcopy(A)
        for i in range(0, 20) :
            (Q, R) = self.qr_decomposition(tmp_mat)
            tmp_mat = self.multiply(R, Q)

        row = len(tmp_mat)
        col = len(tmp_mat[0])
        for i in range(0, row) :
            for j in range(0, col) :
                if i != j :
                    tmp_mat[i][j] = 0

        eig_vec = self.inverse(self.sub(A, tmp_mat))
        return (tmp_mat, eig_vec)

以上函数实现中涉及的"未知"函数实现都能在线面的Link里面找到
http://blog.csdn.net/cinmyheart/article/details/43976423

如果你细心的话就会发现,上面的实现是无法对特征值为0的情况进行求解的,不然BUG.
注意事项 :
这里算法要求待求解矩阵是要满足行列式的值非0.即,矩阵的特征值不能为0.

这里写图片描述











推土机压过
旧日的家只剩下门前电线杆和灰蒙的天

房檐下
伸手去捧雨天的房檐水

屋后桔园里
从秋千上摔下边疼边笑

日落时
有爷爷的三轮车从镇上回来

门前
有人坐着小木凳
眨巴着眼
痴痴地等

太阳不等你
我等你

时间开着推土机
无情的碾过童年


摄于二零一五年二月六日
这里写图片描述

  • 22
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值