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

时间: 2024-11-05 14:59:50

Python 振动分析 迭代法计算高阶特征值及特征向量的相关文章

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

初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 称为高阶函数 ''' #函数作参 def f(x): return x*x #map函数为内置函数,意思为将第二个参数的list作用到f函数中 #最后的结果为一个list print map(f,[1,2,3,4,5]) #reduce函数为内置函数,意思将第二参数的序列作用到add函数值 #将结

python学习笔记4:高阶函数,装饰器,生成器,迭代器

一.高级函数1.把一个函数名当作实参传给另一个函数2.返回值包含函数名>>> def bar():... print ("in the bar")... >>> def foo(func):... res=func()... return res... >>> foo(bar)in the bar 二.嵌套函数在函数中定义另一个函数 三.装饰器装饰器本质上是函数,作用是装饰其他函数,就是为其他函数添加附加功能.原则1:不能修改被装饰

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

函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 而函数式编程(请注意多了一个"式"字)--Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算. 我们首先要搞明白计算机(Computer)和计算(Compute)的概念. 在计算机的层次上,CPU执行的是加减乘除的指令代码

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

把函数作为参数 在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数: def add(x, y, f): return f(x) + f(y) 如果传入abs作为参数f的值: add(-5, 9, abs) 根据函数的定义,函数执行的代码实际上是: abs(-5) + abs(9) 由于参数 x, y 和 f 都可以任意传入,如果 f 传入其他函数,就可以得到不同的返回值. 任务 利用add(x,y,f)函数,计算: import math def add(x, y, f): r

Python学习十二:高阶函数

在学习高阶函数之前需要搞清一个概念: 变量可以指向函数 意思就是:把函数名赋值给另一个变量,然后使用这个变量完成跟函数一样的功能. 如下代码所示: 将求绝对值函数abs赋值给f,然后调用f完成跟abs一样的功能. >>> f = abs >>> f(-100) 100 >>> 好了接下来看:高阶函数 定义为:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 如下代码所示: def add(x , y , f): return f(x) + f

PYTHON学习0028:函数---高阶函数----2019-6-20

1.定义:变量可以指向函数,函数的参数能够接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数.只要把函数作为参数传到其他函数,不管其他函数有没有返回值,,都叫高阶函数.2.函数也可以接收其他函数作为返回值. 原文地址:https://blog.51cto.com/13543767/2411396

python 中的高阶函数

函数名其实就是指向函数的变量 >>> abs(-1) 1 >>> abs <built-in function abs> >>> a=abs >>> a(-1) 1 高阶函数:能接收函数做变量的函数 >>> def abc(x,y,f): ... return f(x)+f(y) ... >>> abc(-2,3,abs) 5 python中的内置高阶函数 map()函数和reduce(

day12——Python高阶函数及匿名函数

高阶函数:就是把函数当成参数传递的一种函数,例如: def add(x,y,f): return f(x) + f(y) print(add(-8,11,abs)) 结果:19 解释: 1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值 2.最后再做和运算 map()函数 map函数时Python内置的一个高阶函数,它接受一个函数f和一个list,并把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表,如下所示: def f2(x): re

python内置常用高阶函数(列出了5个常用的)

原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://blog.csdn.net/cv_you/article/details/70880405 python内置常用高阶函数: 一.函数式编程 •函数本身可以赋值给变量,赋值后变量为函数: •允许将函数本身作为参数传入另一个函数: •允许返回一个函数. 1.map()函数 是 Python 内置的高阶函数,