QR分解迭代求特征值——原生python实现(不使用numpy)

本文介绍了使用Schmidt正交化方法进行QR分解,并通过原生Python实现迭代求解特征值的过程。虽然没有进行上Hessenberg矩阵转换,但通过设定迭代次数作为终止条件,仍能有效计算特征值。实验结果显示,该方法收敛速度快,可求得所有特征值。然而,若要获取特征向量,仍需解决线性方程组。
摘要由CSDN通过智能技术生成

QR分解:

有很多方法可以进行QR迭代,本文使用的是Schmidt正交化方法

具体证明请参考链接 https://wenku.baidu.com/view/c2e34678168884868762d6f9.html

迭代格式

实际在进行QR分解之前一般将矩阵化为上hessnberg矩阵(奈何这个过程比较难以理解,本人智商不够,就不做这一步了哈哈哈)

迭代终止条件

看了很多文章都是设置一个迭代次数,感觉有些不是很合理,本来想采用A(k+1)-A(k)的对角线元素的二范数来作为误差的,但是我有没有一些严格的证明,所以本文也采用比较大众化的思路,设置迭代次数。

Python实现

  1 M = [[2, 4, 2], [-1, 0, -4], [2, 2, 1]]
  2 
  3 import copy
  4 import math
  5 
  6 
  7 class QR(object):
  8 
  9     def __init__(self, data):
 10         self.M = data
 11         self.degree = len(data)
 12 
 13     def get_row(self, index):
 14         res = []
 15         for i in range(self.degree):
 16             res.append(self.M[i][index])
 17         return res
 18 
 19     def get_col(self, index):
 20         res = []
 21         for i in range(self.degree):
 22             res.append(self.M[i][index])
 23         return res
 24 
 25     @staticmethod
 26     def dot(m1, m2):
 27         res = 0
 28         for 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值