参考书 :

<<振动分析>> 张准 汪凤泉 编著 东南大学出版社 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 振动分析 迭代法计算高阶特征值及特征向量的更多相关文章

  1. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  2. python学习8—函数之高阶函数与内置函数

    python学习8—函数之高阶函数与内置函数 1. 高阶函数 a. map()函数 对第二个输入的参数进行第一个输入的参数指定的操作.map()函数的返回值是一个迭代器,只可以迭代一次,迭代过后会被释 ...

  3. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  4. python递归,装饰器,函数, 高阶函数

    在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...

  5. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  6. Learning Python 012 函数式编程 1 高阶函数

    Python 函数式编程 1 高阶函数 高阶函数 Q:什么是高阶函数? A:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 简单举个例子: def add(x, y, f): return ...

  7. python 把函数作为参数 ---高阶函数

    把函数作为参数 在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数: def add(x, y, f): return f(x) + f(y) 如果传入abs作为参数f的值: add( ...

  8. python基础之常用的高阶函数

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...

  9. Python嵌套、递归、高阶函数

    一.嵌套函数 1.嵌套函数简单的理解可以看作是在函数的内部再定义函数,实现函数的“私有”. 2.特点: <1> 函数内部可以再次定义函数. <2> 只有被调用时才会执行(外部函 ...

随机推荐

  1. mongodb(五)

    mongoDB 启动配置祥讲导出,导入,运行时备份Fsync锁,数据修复用户管理,安全认证 1.启动项 mongod --help 1.1利用config配置文件来启动数据库改变端口为8888 mon ...

  2. Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean

    Spring和Hibernate整合的时候我们经常会有如下的配置代码 1,非JPA支持的配置 <!-- 配置 Hibernate 的 SessionFactory 实例: 通过 Spring 提 ...

  3. C++中float类型的存储

    C++中float用32位来表示,f = (-1)^S * T * 2^E,S是符号位,T是尾数,E是指数 首先我们把f表示成科学计数法的形式,然后再写出其在内存中的表示,在这里T写成1.XXX的形式 ...

  4. Flying Right POJ - 3038

    有一条从南到北的航线,航线上有N个机场1-n从南到北分布,每天早上飞机从1飞到n,傍晚从n飞到1.有k组乘客,他们数量为M[k],从S飞到E,飞机上只有C个座位,计算每天飞机最多能拉多少乘客 贪心可以 ...

  5. Cocoapods 版本升级

    和往常一样使用 Cocoapods ,执行命令: $ pod install #输出信息 /System/Library/Frameworks/Ruby.framework/Versions/2.0/ ...

  6. Centos7 安装Nginx服务

    第一种方式:通过yum安装 直接通过 yum install nginx 肯定是不行的,因为yum没有nginx,所以首先把 nginx 的源加入 yum 中. 运行下面的命令: 1.将nginx放到 ...

  7. 关于select Count()的使用和性能问题

    比如Count(*) FROM E_Table WHERE [date] > '2008-1-1' AND istrue = 0 由于操作的数据比较大(400万以上),所以使用了两个数据库,一个 ...

  8. VisualVM远程连接Tomcat(转)

    转自:http://www.cnblogs.com/sunshine-2015/p/5547128.html VisualVM VisualVm是一个将很多JDK命令工具可视化的windows程序,直 ...

  9. meshconverters

    https://github.com/RobotLocomotion/meshConverters meshconverters $ mkdir build && cd build $ ...

  10. Storm中并行度原来是这样计算的(1.0.1版本)

    ==思考问题1== 向集群提交一个拓扑的时候,Storm是如何计算Task数以及Executor数的? 具体有多少个worker,多少个executor,每个executor负责多少个task? == ...