Python 振动分析 迭代法计算高阶特征值及特征向…
2018-06-18 01:49:13来源:未知 阅读 ()
参考书 :
<<振动分析>> 张准 汪凤泉 编著 东南大学出版社 ISBN 7-80123-583-4
参考章节 : 4.6.2 和 4.6.3
<<数值分析>> 崔瑞彩 谢伟松 天津大学出版社 ISBN 7-5618-1366-X
参考章节 : 3.1
参考资料:
<<交替使用幂法和降阶法求解矩阵全部特征值>> 下载地址:https://pan.baidu.com/s/1fmNMnS8zyaMv4B_6jd7rnQ
2018-03-11 笔记
1 求解器代码
import numpy as np class EigenValueModule(object) : K=np.mat([[1]]) #K矩阵 M=np.mat([[1]]) #M矩阵 s=1 #前s阶 Lambdas=[] Xs=[] def GetMax(self,Mat): position=np.argmax(Mat) row,column=Mat.shape row,column=divmod(position, column) Result=Mat[row,column] return Result def IsValid(self,LambdaLast,LambdaNext): #用于判断迭代出的特征值是否满足要求 #要求 Abs(LambdaLast-LambdaNext)/LambdaLast < Epsilon myResult=False Epsilon=1e-3 #0.001 Ratio=abs(LambdaLast-LambdaNext)/LambdaLast if Ratio<Epsilon : myResult=True return myResult def ReduceOrder(self,A,X): a=A[0] X=X/X[0,0] aX=X*a myResult=A-aX myResult=np.delete(myResult,0,0) myResult=np.delete(myResult,0,1) return myResult def solve(self): self.Lambdas=[] self.Xs=[] #导入外部变量 K=self.K M=self.M s=self.s #初始化 R=K.I A=R*M #进行计算 for i in range(s): X=self.ChildSolve(A) A=self.ReduceOrder(A,X) def solveA(self,A): self.Lambdas=[] self.Xs=[] s=self.s #进行计算 for i in range(s): X=self.ChildSolve(A) print(A) A=self.ReduceOrder(A,X) def ChildSolve(self,A): #单个计算过程 n=len(A) X=np.mat(np.ones((1,n))).T #创建试算向量 XMax=self.GetMax(X) LambdaLast=XMax #第一个Lambda Y=X/XMax X=A*Y XMax=self.GetMax(X) LambdaNext=XMax #下一个Lambda while self.IsValid(LambdaLast,LambdaNext)!=True : #Lambda不符合要求 LambdaLast=LambdaNext #更新Lambda Y=X/XMax X=A*Y XMax=self.GetMax(X) LambdaNext=XMax #更新Lambda self.Lambdas.append(LambdaNext) self.Xs.append(X) return X
2 调试代码
调试代码1
import numpy as np from SolveEigenValue import EigenValueModule Figure=EigenValueModule() Figure.M=np.mat([[1,0,0],[0,1,0],[0,0,1]]) Figure.K=np.mat([[2,-1,0],[-1,2,-1],[0,-1,1]]) Figure.s=3 Figure.solve() print(Figure.Lambdas)
调试代码2
import numpy as np from SolveEigenValue import EigenValueModule Figure=EigenValueModule() Figure.s=3 A=np.mat([[1,7,8,9,3],[0,2,5,8,6],[0,2,4,2,2],[0,0,1,6,5],[0,0,0,0,9]]) Figure.solveA(A) print(Figure.Lambdas)
转发请标明来源:https://www.cnblogs.com/nanyunan/p/8546933.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:time模块案例演示
下一篇:python的内存管理机制
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash