首页 > 编程知识 正文

对称矩阵的特征值和特征向量,实对称矩阵不同特征

时间:2023-05-04 00:43:02 阅读:277214 作者:562

 Lanczos法的目的:将实对称矩阵转换成为三对角矩阵(稀疏矩阵),从而便于计算机储存和后续的计算。

在三对角矩阵矩阵上,采用QR分解,得到矩阵的特征值。

# -*- coding: utf-8 -*-"""Created on Tue Nov 20 12:41:40 2018@author: yujin.wang"""import numpy as npimport scipy as sciimport matplotlib.pyplot as pltimport timeimport sysdef lanczos(A,b,nmax):m = np.size(A,1)alpha = []beta = [0]qprev = np.zeros(m)q = b / np.linalg.norm(b)for n in range(nmax):v = np.dot(q,A) #*sci.linalg.inv(q)temp = np.dot(v,q.T)alpha.append(temp[0][0,0])v = v - np.dot(beta[-1],qprev)-np.dot(alpha[-1],q)beta.append(sci.linalg.norm(v))qprev = qq = v/beta[-1]beta = beta[1:-1]T = np.diag(alpha) + np.diag(beta,1) +np.diag(beta,-1)return Tdef qreigen(A,num=100):m = np.size(A,1)p = np.eye(m)for i in range(num):v = np.diag(A)q,r = sci.linalg.qr(A)A = np.dot(r,q)p = np.dot(p,q)tol = max(np.diag(A))-max(v)print 'TOL:',tol,'Max. Eig:',max(v)if np.abs(tol) <1e-6:break#s = np.diag(np.diag(r))return p,np.diag(A)if __name__ == '__main__':A = np.matrix([[5,1,3],[1,2,0],[3,0,11]])print np.linalg.eig(A)[0]print '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'p,s = qreigen(A)print sprint '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'b = np.matrix([1,1,1])tridiag = lanczos(A,b,23)p,s = qreigen(tridiag,num=200)print max(s),min(s)

参考:https://baike.baidu.com/item/Lanczos%E7%AE%97%E6%B3%95/9849921?fr=aladdin 

           http://www.cnblogs.com/qxred/p/dcalgorithm.html

           http://www.doc88.com/p-1446190703774.html

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。