Python 振动分析 迭代法计算高阶特征值及特征向量
参考书 :
<<振动分析>> 张准 汪凤泉 编著 东南大学出版社 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
Python 振动分析 迭代法计算高阶特征值及特征向量的更多相关文章
- 初学 Python(十二)——高阶函数
初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...
- python学习8—函数之高阶函数与内置函数
python学习8—函数之高阶函数与内置函数 1. 高阶函数 a. map()函数 对第二个输入的参数进行第一个输入的参数指定的操作.map()函数的返回值是一个迭代器,只可以迭代一次,迭代过后会被释 ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- python递归,装饰器,函数, 高阶函数
在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...
- (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)
原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...
- Learning Python 012 函数式编程 1 高阶函数
Python 函数式编程 1 高阶函数 高阶函数 Q:什么是高阶函数? A:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 简单举个例子: def add(x, y, f): return ...
- python 把函数作为参数 ---高阶函数
把函数作为参数 在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数: def add(x, y, f): return f(x) + f(y) 如果传入abs作为参数f的值: add( ...
- python基础之常用的高阶函数
前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...
- Python嵌套、递归、高阶函数
一.嵌套函数 1.嵌套函数简单的理解可以看作是在函数的内部再定义函数,实现函数的“私有”. 2.特点: <1> 函数内部可以再次定义函数. <2> 只有被调用时才会执行(外部函 ...
随机推荐
- RocketMQ入门(简介、特点)
简介: RocketMQ作为一款纯java.分布式.队列模型的开源消息中间件,支持事务消息.顺序消息.批量消息.定时消息.消息回溯等. 发展历程: 1. Metaq(Metamorphosis) 1. ...
- MYSQL的随机查询的实现方法
的确是那么回事. MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() ...
- Linux实战教学笔记41:企业级SVN版本管理与大型代码上线方案
第1章 SVN服务实战应用指南 1.1 SVN介绍 1.1.1 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN ...
- built-in SpecularType of Unity
[built-in SpecularType of Unity] 1.声明变量. 注意并没有在Shader中声明_SpecColor,因为Lighting.cginc中已经帮我们声明. 2.声明使用B ...
- Can not find -lXXXX
Description I had the error message Can not find -lGL when i run qt qmake long ago. The error messag ...
- Git自动补全
一.简介 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 二.操作步骤 1) cd ...
- springboot+beetlsql+mysql整合
一.工程目录结构 二.pom.xml文件配置 <dependency> <groupId>mysql</groupId> <artifactId>mys ...
- Zedboard学习(四):PS+PL搭建SoC最小系统 标签: fpgazedboardxilinxsoczynq 2017-07-07 15:58 7人阅读
zynq最核心的设计理念就是软件加硬件,即PS+PL.通过软硬件协同设计,结合了FPGA与双arm9内核,对于嵌入式拥有极大的优势. SoC:System on Chip的缩写,称为芯片级系统,也有称 ...
- PollingProvider方法的使用及示例
来自<sencha touch权威指南>第12章,374页开始 ----------------------------------------------------- PollingP ...
- octomap相关
转载自http://blog.csdn.net/linuxarmsummary/article/details/50924947 什么是octomap? RGBD SLAM的目的有两个:估计机器人的轨 ...