结构力学数值方法:谐波平衡法:线性振动理论_第1页
结构力学数值方法:谐波平衡法:线性振动理论_第2页
结构力学数值方法:谐波平衡法:线性振动理论_第3页
结构力学数值方法:谐波平衡法:线性振动理论_第4页
结构力学数值方法:谐波平衡法:线性振动理论_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

结构力学数值方法:谐波平衡法:线性振动理论1绪论1.1线性振动理论简介线性振动理论是结构力学的一个重要分支,主要研究在小变形和小位移条件下,结构或系统在受到周期性或非周期性外力作用时的振动特性。线性振动理论假设结构的物理性质(如弹性模量、质量等)不随时间变化,且变形与外力之间存在线性关系。这一理论广泛应用于机械、土木、航空航天等工程领域,帮助工程师预测和控制结构的振动行为,以提高结构的稳定性和安全性。1.1.1线性振动方程线性振动的基本方程通常可以表示为:m其中:-m是质量,-c是阻尼系数,-k是刚度系数,-x是位移,-x和x分别是位移的一阶和二阶导数,表示速度和加速度,-Ft1.1.2简谐振动当外力Ft是简谐函数时,即F1.2谐波平衡法的历史与发展谐波平衡法(HarmonicBalanceMethod,HBM)是一种用于求解非线性振动问题的数值方法,但其原理同样适用于线性振动分析。该方法最早由Ritz和Galerkin在20世纪初提出,用于求解线性振动问题。随着计算机技术的发展,谐波平衡法被扩展应用于非线性振动问题,成为一种高效且广泛应用的数值分析工具。1.2.1谐波平衡法原理谐波平衡法的基本思想是将系统的响应表示为一系列简谐函数的线性组合,然后通过平衡响应的各次谐波分量与外力的谐波分量,求解系统的振动特性。这种方法特别适用于分析具有周期性外力作用的系统,可以有效地处理多自由度系统的振动问题。1.2.2应用示例假设我们有一个单自由度系统,其振动方程为:m我们使用谐波平衡法求解该系统的稳态响应。首先,假设系统的响应xtx其中X1和X2是待求的振幅系数。将xt及其导数代入振动方程,然后通过平衡方程两边的同次谐波分量,可以得到关于X11.2.3Python代码示例下面是一个使用Python和SymPy求解上述单自由度系统稳态响应的示例代码:importsympyassp

#定义符号变量

t,omega,X1,X2=sp.symbols('tomegaX1X2')

m,c,k,F0=sp.symbols('mckF0')

#定义系统的响应

x=X1*sp.sin(omega*t)+X2*sp.cos(omega*t)

#定义振动方程

equation=m*x.diff(t,2)+c*x.diff(t)+k*x-F0*sp.sin(omega*t)

#计算方程的傅里叶级数展开

#由于我们只考虑一次谐波,这里直接平衡一次谐波分量

#分别计算方程中sin(omega*t)和cos(omega*t)的系数

coeff_sin=egrate(equation*sp.sin(omega*t),(t,0,2*sp.pi/omega))

coeff_cos=egrate(equation*sp.cos(omega*t),(t,0,2*sp.pi/omega))

#建立方程组

equations=[coeff_sin,coeff_cos]

#求解方程组

solution=sp.solve(equations,(X1,X2))

#输出解

print("振幅系数X1和X2的解为:")

print(solution)这段代码首先定义了系统的振动方程,然后通过积分平衡方程中简谐函数的系数,构建并求解了关于振幅系数X1和X1.3结论谐波平衡法是一种强大的数值方法,不仅适用于线性振动问题,也广泛应用于非线性振动分析。通过将系统的响应表示为简谐函数的线性组合,谐波平衡法能够有效地处理周期性外力作用下的振动问题,为工程师提供了一种预测和控制结构振动行为的有效工具。2基本概念2.1振动系统的分类在结构力学中,振动系统可以根据其自由度的数量和振动特性进行分类。主要分为以下几类:单自由度系统:系统只有一个独立的运动方向,例如,一个弹簧-质量系统,质量块只能沿直线振动。多自由度系统:系统有多个独立的运动方向,每个方向上的运动都可以用一个自由度来描述。例如,一个由多个弹簧和质量块组成的系统,每个质量块的运动都是一个自由度。连续系统:系统中的自由度是无限的,例如,一根悬臂梁的振动,其上任意点的位移都可以看作是一个自由度。2.2自由度与模态分析自由度(DegreeofFreedom,DOF)是描述系统运动状态的独立参数的数量。在振动分析中,模态分析是一种常用的方法,用于确定系统的固有频率、模态形状和模态阻尼。模态分析可以将多自由度系统或连续系统的振动问题简化为一系列独立的单自由度振动问题,每个问题对应一个模态。2.2.1示例:单自由度系统的模态分析假设有一个单自由度系统,由一个质量块m、一个弹簧k和一个阻尼器c组成。系统的运动方程可以表示为:m其中,x是质量块的位移,Ft代码示例使用Python的scipy库来求解该系统的自由振动响应。假设m=1kg,k=10Nimportnumpyasnp

fromegrateimportsolve_ivp

#系统参数

m=1.0#质量

k=10.0#弹簧刚度

c=0.5#阻尼系数

#初始条件

x0=0.1#初始位移

v0=0.0#初始速度

#定义运动方程

defvibration(t,y):

x,v=y

dxdt=v

dvdt=(-c*v-k*x)/m

return[dxdt,dvdt]

#定义时间范围

t_span=(0,10)

t_eval=np.linspace(0,10,1000)

#求解

sol=solve_ivp(vibration,t_span,[x0,v0],t_eval=t_eval)

#绘制结果

importmatplotlib.pyplotasplt

plt.plot(sol.t,sol.y[0],label='位移')

plt.plot(sol.t,sol.y[1],label='速度')

plt.legend()

plt.show()2.2.2解释上述代码使用egrate.solve_ivp函数求解了单自由度系统的运动方程。vibration函数定义了系统的运动方程,solve_ivp函数用于数值积分,求解系统的位移和速度随时间的变化。2.3线性与非线性振动的区别线性振动和非线性振动的主要区别在于系统响应与激励力之间的关系是否遵循线性原则。线性振动:系统响应与激励力之间存在线性关系,即响应的大小与激励力的大小成正比。线性振动系统的运动方程是线性的,可以使用模态分析、傅里叶变换等方法求解。非线性振动:系统响应与激励力之间存在非线性关系,即响应的大小与激励力的大小不成正比。非线性振动系统的运动方程是非线性的,求解方法通常包括数值积分、谐波平衡法、多尺度法等。2.3.1示例:非线性振动系统的谐波平衡法谐波平衡法是一种求解非线性振动系统响应的近似方法,它假设系统的响应可以表示为一系列谐波的线性组合。假设有一个非线性振动系统,其运动方程可以表示为:m其中,α是非线性项的系数。代码示例使用Python的scipy库和numpy库来求解该系统的谐波平衡法近似解。假设m=1kg,k=10Nimportnumpyasnp

fromscipy.optimizeimportfsolve

#系统参数

m=1.0#质量

k=10.0#弹簧刚度

c=0.5#阻尼系数

alpha=1.0#非线性项系数

F0=5.0#外力幅值

omega=2*np.pi#外力频率

#定义谐波平衡法方程

defharmonic_balance(A,phi):

x=A*np.sin(omega*t+phi)

dxdt=omega*A*np.cos(omega*t+phi)

d2xdt2=-omega**2*A*np.sin(omega*t+phi)

returnm*d2xdt2+c*dxdt+k*x+alpha*x**3-F0*np.sin(omega*t)

#定义时间范围

t=np.linspace(0,10,1000)

#求解谐波平衡法方程

A_guess=1.0#幅值初值

phi_guess=0.0#相位初值

A,phi=fsolve(harmonic_balance,[A_guess,phi_guess])

#计算近似解

x=A*np.sin(omega*t+phi)

#绘制结果

importmatplotlib.pyplotasplt

plt.plot(t,x,label='位移')

plt.legend()

plt.show()2.3.2解释上述代码使用scipy.optimize.fsolve函数求解了非线性振动系统的谐波平衡法方程。harmonic_balance函数定义了系统的谐波平衡方程,fsolve函数用于求解幅值A和相位ϕ。最后,使用求得的A和ϕ计算了系统的近似响应,并绘制了位移随时间的变化曲线。3谐波分析基础3.1傅里叶级数与谐波分析3.1.1原理傅里叶级数是一种将周期函数分解为一系列正弦和余弦函数之和的方法。对于结构力学中的线性振动分析,傅里叶级数提供了一种强大的工具,可以将复杂的周期性载荷分解为一系列的谐波分量,从而简化振动问题的求解。每个谐波分量都对应于特定频率的正弦或余弦函数,这使得我们能够分析结构在不同频率下的响应。3.1.2内容考虑一个周期为T的周期函数ftf其中,a0aab3.1.3示例假设我们有一个周期为T=2π的周期函数fimportnumpyasnp

fromegrateimportquad

#定义周期函数

deff(t):

return2+np.sin(t)+0.5*np.sin(2*t)

#定义周期

T=2*np.pi

#计算傅里叶系数

deffourier_coefficient(n):

a_n=(2/T)*quad(lambdat:f(t)*np.cos(n*t),0,T)[0]

b_n=(2/T)*quad(lambdat:f(t)*np.sin(n*t),0,T)[0]

returna_n,b_n

#计算前几项系数

coefficients=[fourier_coefficient(n)forninrange(4)]

print(coefficients)运行上述代码,我们可以得到傅里叶系数a0,af3.2周期性与非周期性载荷的处理3.2.1原理在结构力学中,载荷可以是周期性的,也可以是非周期性的。周期性载荷可以直接使用傅里叶级数进行分析,而非周期性载荷则需要通过扩展或近似方法转化为周期性载荷。一种常见的方法是将非周期性载荷视为周期性载荷的一个周期,然后使用傅里叶级数分析其在该周期内的行为。3.2.2内容对于非周期性载荷,我们可以通过以下步骤将其转化为周期性载荷:确定分析周期:选择一个足够长的时间段作为分析周期,使得该时间段内的载荷变化能够充分代表其特性。周期性扩展:将选定时间段内的载荷数据重复,形成一个周期性载荷。傅里叶级数分析:对周期性载荷进行傅里叶级数分析,得到其谐波分量。3.2.3示例假设我们有一个非周期性载荷数据,表示为时间序列ftimportnumpyasnp

importmatplotlib.pyplotasplt

#非周期性载荷数据

t_data=np.linspace(0,10,1000)

f_data=np.sin(t_data)+np.sin(2*t_data)+np.sin(3*t_data)

#选择分析周期

T_analysis=10

t_period=np.linspace(0,T_analysis,1000)

#周期性扩展

f_period=np.tile(f_data,2)

#使用傅里叶级数分析

deffourier_series(t,coefficients):

series=coefficients[0]/2

forninrange(1,len(coefficients),2):

series+=coefficients[n]*np.cos(n*t/T_analysis*2*np.pi)

series+=coefficients[n+1]*np.sin(n*t/T_analysis*2*np.pi)

returnseries

#计算傅里叶系数

coefficients=[quad(lambdat:f_period(t)*np.cos(n*t/T_analysis*2*np.pi),0,T_analysis)[0]*2/T_analysisforninrange(10)]

coefficients+=[quad(lambdat:f_period(t)*np.sin(n*t/T_analysis*2*np.pi),0,T_analysis)[0]*2/T_analysisforninrange(1,10)]

#画出原数据和傅里叶级数近似

plt.figure(figsize=(10,5))

plt.plot(t_period,f_period[:1000],label='OriginalData')

plt.plot(t_period,fourier_series(t_period,coefficients),label='FourierSeriesApproximation')

plt.legend()

plt.show()在这个例子中,我们首先生成了一个非周期性载荷数据,然后选择了一个分析周期T=4谐波平衡法原理4.1谐波平衡法的基本假设谐波平衡法(HarmonicBalanceMethod,HBM)是一种用于求解非线性振动系统响应的数值方法。在结构力学领域,尤其是处理线性或非线性振动问题时,HBM提供了一种有效途径。其基本假设是:响应的周期性:假设系统的响应可以表示为输入激励频率的周期函数。傅里叶级数展开:将响应表示为傅里叶级数的形式,即一系列正弦和余弦函数的线性组合。平衡条件:通过将系统方程在每个频率分量上进行平衡,来求解响应的傅里叶系数。4.1.1例子描述考虑一个简单的单自由度非线性振动系统,其运动方程可以表示为:m其中,m是质量,c是阻尼系数,k是线性刚度,fx是非线性力项,F0是激励力的幅值,ω是激励频率,假设响应xtx其中,Xn和ϕn分别是第4.2谐波响应的求解过程谐波平衡法的求解过程主要包括以下步骤:响应的傅里叶级数展开:将响应xt和非线性力项f系统方程的展开:将运动方程中的每一项也表示为傅里叶级数。平衡条件的建立:在每个频率分量上,将系统方程的左侧(响应的导数和非线性力项)与右侧(激励力)进行平衡,得到一组关于Xn和ϕ求解代数方程:通过数值方法求解上述代数方程,得到Xn和ϕ重构响应:将求得的傅里叶系数代入傅里叶级数中,重构出系统的响应。4.2.1代码示例下面是一个使用Python和scipy库来求解单自由度非线性振动系统谐波响应的示例:importnumpyasnp

fromscipy.optimizeimportfsolve

importmatplotlib.pyplotasplt

#系统参数

m=1.0#质量

c=0.1#阻尼系数

k=1.0#线性刚度

F0=1.0#激励力幅值

omega=1.0#激励频率

#非线性力项

deff(x):

returnx**3

#傅里叶系数的求解函数

defbalance_equations(X_phi):

X=X_phi[:N+1]

phi=X_phi[N+1:]

#构建系统方程的平衡条件

#这里省略了具体的代数方程构建过程,因为它是基于系统方程和傅里叶级数展开的

#假设我们已经得到了一组关于X和phi的代数方程

#返回方程的残差,用于fsolve求解

returnresiduals

#求解傅里叶系数

N=5#谐波次数

X_phi0=np.ones(2*(N+1))#初始猜测

X_phi=fsolve(balance_equations,X_phi0)

#重构响应

t=np.linspace(0,2*np.pi/omega,1000)

x=np.zeros_like(t)

forninrange(N+1):

x+=X_phi[n]*np.cos(n*omega*t+X_phi[N+1+n])

#绘制响应

plt.figure()

plt.plot(t,x)

plt.xlabel('时间(s)')

plt.ylabel('位移(m)')

plt.title('谐波平衡法求解的响应')

plt.show()4.2.2解释在上述代码中,我们首先定义了系统的参数和非线性力项。然后,我们构建了一个函数balance_equations来求解傅里叶系数Xn和ϕn。这个函数返回的是代数方程的残差,用于fsolve函数求解。最后,我们使用求得的傅里叶系数重构了系统的响应,并使用matplotlib请注意,实际的代数方程构建过程依赖于具体的系统方程和傅里叶级数展开,这里为了简化示例,省略了这部分细节。在实际应用中,这一步骤需要根据系统的具体数学模型来完成。5数值方法应用5.1有限元法在谐波平衡中的应用在结构力学中,谐波平衡法(HarmonicBalanceMethod,HBM)是一种用于求解非线性振动问题的有效数值方法。当应用于线性振动理论时,HBM可以简化为傅里叶级数的展开,用于描述系统的响应。结合有限元法(FiniteElementMethod,FEM),我们可以对复杂结构的线性振动进行精确分析。5.1.1原理有限元法将结构离散化为多个小单元,每个单元的振动响应可以用谐波平衡法表示。对于线性系统,每个单元的响应可以表示为一系列谐波的叠加,其中每个谐波的频率是基频的整数倍。通过求解每个单元在不同频率下的响应,我们可以得到整个结构的频域响应。5.1.2内容结构离散化:使用有限元法将结构分解为多个单元,每个单元用特定的节点和边来描述。振动方程建立:为每个单元建立振动方程,考虑质量、刚度和阻尼的影响。谐波平衡法应用:将每个单元的响应表示为傅里叶级数,然后求解级数的系数,以得到单元的振动响应。边界条件处理:在有限元模型中应用边界条件,如固定端、自由端或预应力条件。载荷的数值处理:将外部载荷(如周期性载荷或随机载荷)转换为谐波形式,以便与谐波平衡法结合使用。5.1.3示例假设我们有一个简单的单自由度系统,其振动方程为:m其中,m是质量,c是阻尼系数,k是刚度,F0是载荷幅值,ω是载荷频率,x我们可以使用谐波平衡法和有限元法来求解这个系统的响应。首先,将位移x表示为傅里叶级数:x然后,将振动方程中的xt替换为上述傅里叶级数,并求解系数Xn和相位代码示例importnumpyasnp

fromscipy.optimizeimportfsolve

#系统参数

m=1.0#质量

c=0.1#阻尼系数

k=10.0#刚度

F0=1.0#载荷幅值

omega=1.0#载荷频率

#傅里叶级数的阶数

N=5

#定义未知数的初始猜测

X_guess=np.ones(N+1)

phi_guess=np.zeros(N+1)

#定义残差函数

defresidual(X_phi):

X=X_phi[:N+1]

phi=X_phi[N+1:]

x=np.sum([X[n]*np.cos(n*omega*t+phi[n])forninrange(N+1)])

dxdt=-np.sum([n*omega*X[n]*np.sin(n*omega*t+phi[n])forninrange(1,N+1)])

d2xdt2=-np.sum([n**2*omega**2*X[n]*np.cos(n*omega*t+phi[n])forninrange(1,N+1)])

returnm*d2xdt2+c*dxdt+k*x-F0*np.cos(omega*t)

#时间向量

t=np.linspace(0,2*np.pi/omega,1000)

#求解未知数

X_phi_solution=fsolve(residual,np.concatenate((X_guess,phi_guess)))

#解析结果

X_solution=X_phi_solution[:N+1]

phi_solution=X_phi_solution[N+1:]

#打印结果

print("傅里叶系数:",X_solution)

print("相位角:",phi_solution)解释上述代码中,我们使用了numpy和scipy库来求解单自由度系统的振动响应。首先,定义了系统的参数和傅里叶级数的阶数。然后,定义了残差函数,该函数计算了振动方程的左侧与右侧的差值。通过fsolve函数求解未知数,即傅里叶系数和相位角。最后,打印出求解得到的傅里叶系数和相位角。5.2边界条件与载荷的数值处理在使用有限元法和谐波平衡法分析结构振动时,正确处理边界条件和载荷是至关重要的。边界条件决定了结构的约束,而载荷则提供了激励源。5.2.1原理边界条件可以通过修改有限元模型的刚度矩阵和质量矩阵来实现。例如,固定端的边界条件可以通过将相应的刚度矩阵元素设置为无穷大来实现。载荷的数值处理则需要将载荷转换为谐波形式,以便与谐波平衡法结合使用。5.2.2内容边界条件的处理:包括固定端、自由端、预应力条件等。载荷的转换:将周期性载荷或随机载荷转换为谐波形式。数值求解:结合边界条件和载荷的处理,使用谐波平衡法和有限元法求解结构的振动响应。5.2.3示例假设我们有一个两端固定的梁,受到周期性载荷的作用。我们可以使用有限元法和谐波平衡法来求解梁的振动响应。代码示例importnumpyasnp

fromscipy.linalgimportsolve

#系统参数

L=1.0#梁的长度

E=200e9#弹性模量

I=1e-4#惯性矩

rho=7800#密度

A=1e-2#截面积

n_elements=10#元素数量

N=5#傅里叶级数的阶数

#载荷参数

F0=1.0#载荷幅值

omega=1.0#载荷频率

#定义有限元模型

deffem_model(L,E,I,rho,A,n_elements):

#计算每个元素的长度

l=L/n_elements

#质量矩阵

M=np.zeros((2*n_elements,2*n_elements))

#刚度矩阵

K=np.zeros((2*n_elements,2*n_elements))

#载荷向量

F=np.zeros(2*n_elements)

#填充质量矩阵和刚度矩阵

foriinrange(n_elements):

M[2*i:2*i+2,2*i:2*i+2]+=rho*A*l/6*np.array([[2,1],[1,2]])

K[2*i:2*i+2,2*i:2*i+2]+=E*I/l**3*np.array([[12,6*l],[6*l,4*l**2]])

#应用边界条件

K[0,:]=0

K[0,0]=1e10

K[-1,:]=0

K[-1,-1]=1e10

#载荷向量

F[n_elements-1]=F0

returnM,K,F

#求解振动响应

defsolve_vibration(M,K,F,omega,N):

#计算频率矩阵

Omega=np.diag([n**2*omega**2forninrange(N+1)])

#扩展质量矩阵和刚度矩阵

M_ext=np.kron(np.eye(N+1),M)

K_ext=np.kron(np.eye(N+1),K)+np.kron(Omega,np.zeros((2*n_elements,2*n_elements)))

#扩展载荷向量

F_ext=np.kron(np.array([1,0]),F)

#求解振动响应

X=solve(K_ext,F_ext)

returnX

#生成有限元模型

M,K,F=fem_model(L,E,I,rho,A,n_elements)

#求解振动响应

X=solve_vibration(M,K,F,omega,N)

#打印结果

print("振动响应:",X)解释在上述代码中,我们首先定义了一个生成有限元模型的函数fem_model,该函数计算了梁的质量矩阵、刚度矩阵和载荷向量。然后,我们定义了一个求解振动响应的函数solve_vibration,该函数将质量矩阵、刚度矩阵和载荷向量扩展到傅里叶级数的阶数,并求解振动响应。最后,我们生成了有限元模型,并求解了振动响应。通过这些步骤,我们可以有效地使用有限元法和谐波平衡法来分析结构的线性振动,同时处理复杂的边界条件和载荷。6线性振动分析6.1单自由度系统的线性振动6.1.1原理单自由度系统(SingleDegreeofFreedom,SDOF)的线性振动分析主要关注系统在受到周期性或瞬态力作用下的响应。这类系统通常由一个质量块、一个弹簧和一个阻尼器组成,其动力学方程可以表示为:m其中,m是质量,c是阻尼系数,k是弹簧刚度,x是位移,x和x分别是速度和加速度,Ft6.1.2内容对于单自由度系统,我们可以通过解析方法求解其振动响应。当外力为简谐力时,即Ft示例:求解单自由度系统的响应假设我们有一个单自由度系统,其参数为:m=1 kg,c=0.2 importnumpyasnp

fromegrateimportodeint

importmatplotlib.pyplotasplt

#定义动力学方程

defvibration(state,t,m,c,k,F0,omega):

x,v=state#x是位移,v是速度

dxdt=v#位移对时间的导数是速度

dvdt=(-c*v-k*x+F0*np.sin(omega*t))/m#速度对时间的导数是加速度

return[dxdt,dvdt]

#初始条件

x0=0.0

v0=0.0

state0=[x0,v0]

#参数

m=1.0

c=0.2

k=100.0

F0=10.0

omega=10.0

#时间向量

t=np.linspace(0,10,1000)

#求解微分方程

sol=odeint(vibration,state0,t,args=(m,c,k,F0,omega))

#绘制位移和速度随时间变化的曲线

plt.figure()

plt.plot(t,sol[:,0],'b',label='位移x(t)')

plt.plot(t,sol[:,1],'g',label='速度v(t)')

plt.legend()

plt.xlabel('时间t')

plt.grid()

plt.show()6.1.3解释上述代码中,我们首先定义了系统的动力学方程vibration,然后设定了系统的初始条件和参数。使用odeint函数求解微分方程,得到位移和速度随时间变化的数值解。最后,我们使用matplotlib库绘制了位移和速度随时间变化的曲线。6.2多自由度系统的线性振动6.2.1原理多自由度系统(MultipleDegreesofFreedom,MDOF)的线性振动分析涉及多个质量块、弹簧和阻尼器的相互作用。系统的动力学方程可以表示为矩阵形式:M其中,M是质量矩阵,C是阻尼矩阵,K是刚度矩阵,X是位移向量,X和X分别是速度和加速度向量,Ft6.2.2内容多自由度系统的振动分析通常需要数值方法,如有限元法或模态分析。模态分析可以将复杂的多自由度系统分解为一系列独立的单自由度系统,每个系统对应一个固有频率和模态形状。示例:模态分析求解多自由度系统的响应假设我们有一个由两个质量块、两个弹簧和一个阻尼器组成的多自由度系统。我们可以通过Python的numpy库进行模态分析,求解系统的固有频率和模态形状。importnumpyasnp

#定义质量矩阵M和刚度矩阵K

M=np.array([[1,0],[0,1]])#假设每个质量块的质量为1kg

K=np.array([[100,-50],[-50,100]])#假设弹簧刚度分别为100N/m和50N/m

#计算固有频率和模态形状

eigenvalues,eigenvectors=np.linalg.eig(np.linalg.inv(M)@K)

#固有频率

omega_n=np.sqrt(eigenvalues)

#模态形状

phi=eigenvectors

#输出结果

print("固有频率:",omega_n)

print("模态形状:",phi)6.2.3解释在上述代码中,我们首先定义了质量矩阵M和刚度矩阵K。然后,我们使用numpy.linalg.eig函数求解特征值问题,得到系统的固有频率和模态形状。固有频率是通过计算特征值的平方根获得的,模态形状则直接由特征向量给出。通过模态分析,我们可以将多自由度系统的问题简化为一系列独立的单自由度系统问题,每个问题对应一个固有频率和模态形状。这有助于我们理解和分析系统的振动特性,特别是在设计和优化结构时。7谐波平衡法在结构振动中的应用7.1结构振动问题的建模在结构力学中,结构振动问题的建模通常涉及将实际结构简化为数学模型,以便于分析和求解。线性振动理论假设结构的响应与激励成线性关系,这在小振幅振动和结构材料线性弹性范围内是合理的。模型通常包括质量、刚度和阻尼等参数,这些参数可以通过实验或理论计算获得。7.1.1质量矩阵质量矩阵表示结构中各质点的质量,通常是一个对角矩阵,其中对角线元素代表各自由度的质量。7.1.2刚度矩阵刚度矩阵描述了结构在变形时的恢复力,反映了结构的弹性性质。对于线性问题,刚度矩阵是常数。7.1.3阻尼矩阵阻尼矩阵表示结构中能量耗散的特性,可以是粘性阻尼、库仑阻尼或结构阻尼。在数值分析中,阻尼矩阵常被简化为与刚度或质量矩阵成比例的形式。7.1.4动力学方程结构振动的动力学方程可以表示为:M其中,M是质量矩阵,C是阻尼矩阵,K是刚度矩阵,u是位移向量,u和u分别表示速度和加速度向量,Ft7.2谐波平衡法求解结构振动问题谐波平衡法是一种用于求解非线性振动问题的数值方法,但在处理线性振动问题时,它同样有效。该方法基于假设结构的响应可以近似为一系列谐波的叠加,即:u其中,Ui是振幅,ω是基频,ϕ7.2.1步骤假设响应:首先,根据问题的性质,假设响应的谐波形式。代入动力学方程:将假设的响应代入结构的动力学方程中。求解系数:通过应用傅里叶级数的性质,求解振幅Ui和相位角ϕ验证解:检查求得的解是否满足原动力学方程和边界条件。7.2.2代码示例假设我们有一个单自由度系统,质量m=1kg,刚度k=importnumpyasnp

fromscipy.optimizeimportfsolve

#定义参数

m=1.0#质量

k=100.0#刚度

F0=10.0#外力幅值

omega=10.0#外力频率

#动力学方程

defdynamics(u,omega,t):

returnm*u[1]+k*u[0]-F0*np.cos(omega*t)

#假设响应形式

defassumed_response(U,phi,omega,t):

returnU*np.cos(omega*t+phi)

#求解振幅和相位角

#通过设置t=0,可以简化求解过程

t=0

U_guess=1.0

phi_guess=0.0

#定义求解函数

defsolve(U,phi):

u=assumed_response(U,phi,omega,t)

du=-omega*U*np.sin(omega*t+phi)

returndynamics(u,omega,t),dynamics(du,omega,t)

#使用fsolve求解

U,phi=fsolve(solve,(U_guess,phi_guess))

#输出结果

print("振幅U:",U)

print("相位角phi:",phi)

#计算响应

t_values=np.linspace(0,2*np.pi,100)

response=assumed_response(U,phi,omega,t_values)

#绘制响应

importmatplotlib.pyplotasplt

plt.plot(t_values,response)

plt.xlabel('时间t')

plt.ylabel('位移u(t)')

plt.title('单自由度系统响应')

plt.show()7.2.3解释在上述代码中,我们首先定义了系统的参数和动力学方程。然后,我们假设了响应的形式,并通过fsolve函数求解振幅U和相位角ϕ。最后,我们计算了在一系列时间点上的响应,并使用matplotlib库绘制了响应曲线。通过谐波平衡法,我们可以有效地求解结构振动问题,特别是在处理周期性或谐波激励时。这种方法不仅适用于线性系统,也可以扩展到非线性系统,通过增加谐波项的数量来提高解的精度。8桥梁结构的谐波平衡分析8.1引言在结构力学中,谐波平衡法(HarmonicBalanceMethod,HBM)是一种用于分析非线性振动系统的方法,但其原理同样适用于线性系统的分析。对于桥梁结构,HBM能够帮助工程师理解在周期性荷载作用下结构的响应,这对于设计和维护至关重要。8.2原理谐波平衡法基于傅里叶级数展开,将结构的响应表示为一系列谐波的组合。对于线性系统,响应可以精确地表示为输入荷载的谐波分量的线性组合。这种方法特别适用于分析具有周期性荷载的结构,如桥梁在风荷载或交通荷载下的响应。8.2.1数学模型考虑一个简化的桥梁模型,其动力学方程可以表示为:m其中,m是质量,c是阻尼系数,k是刚度系数,u是位移,u和u分别是速度和加速度,Ft8.2.2谐波平衡法应用假设荷载FtF则可以将位移utu其中,un和ϕn分别是第8.2.3代码示例使用Python和其科学计算库NumPy和SciPy,我们可以实现谐波平衡法来分析桥梁结构的响应。importnumpyasnp

fromscipy.linalgimportsolve

#定义参数

m=1.0#质量

c=0.1#阻尼系数

k=10.0#刚度系数

F0=1.0#荷载幅值

omega=1.0#荷载频率

#定义谐波数

N=5#考虑前5个谐波

#初始化矩阵和向量

A=np.zeros((2*N,2*N))

B=np.zeros(2*N)

#构建矩阵和向量

forninrange(N):

A[2*n,2*n]=k-(n*omega)**2*m

A[2*n,2*n+1]=-c*n*omega

A[2*n+1,2*n]=c*n*omega

A[2*n+1,2*n+1]=k-(n*omega)**2*m

ifn==0:

B[2*n]=F0

#求解线性系统

X=solve(A,B)

#解析结果

un=X[::2]

phi_n=np.arctan2(X[1::2],un)

#打印结果

print("谐波幅值:",un)

print("谐波相位:",phi_n)8.2.4解释上述代码中,我们首先定义了桥梁结构的动力学参数。然后,我们初始化了一个2N×2N的矩阵A和一个2N维的向量B,其中N是我们考虑的谐波数。矩阵A和向量B的构建基于谐波平衡法的数学模型,其中通过求解线性系统AX=B,我们得到了位移的谐波幅值un8.3结论谐波平衡法为桥梁结构的线性振动分析提供了一种有效的方法,通过将响应表示为傅里叶级数,可以精确地计算出在周期性荷载作用下的位移、速度和加速度的谐波分量。这对于评估桥梁的动态性能和设计安全至关重要。9飞机机翼的线性振动分析9.1引言飞机机翼在飞行过程中会经历各种振动,包括由气流引起的振动。线性振动理论结合谐波平衡法可以用来分析这些振动,确保飞机的安全性和舒适性。9.2原理飞机机翼的振动可以简化为一个或多个自由度的振动系统。对于线性系统,谐波平衡法可以用来分析在周期性气动荷载作用下的机翼响应。9.2.1数学模型考虑一个简化的机翼模型,其动力学方程可以表示为:m其中,m是机翼的质量,c是阻尼系数,k是刚度系数,y是机翼的位移,y和y分别是速度和加速度,Pt9.2.2谐波平衡法应用假设气动荷载PtP则可以将位移yty其中,yn和ψn分别是第9.2.3代码示例使用Python和其科学计算库,我们可以实现谐波平衡法来分析飞机机翼的响应。importnumpyasnp

fromscipy.linalgimportsolve

#定义参数

m=100.0#质量

c=1.0#阻尼系数

k=1000.0#刚度系数

P0=50.0#荷载幅值

Omega=2.0#荷载频率

#定义谐波数

N=5#考虑前5个谐波

#初始化矩阵和向量

A=np.zeros((2*N,2*N))

B=np.zeros(2*N)

#构建矩阵和向量

forninrange(N):

A[2*n,2*n]=k-(n*Omega)**2*m

A[2*n,2*n+1]=-c*n*Omega

A[2*n+1,2*n]=c*n*Omega

A[2*n+1,2*n+1]=k-(n*Omega)**2*m

ifn==0:

B[2*n]=P0

#求解线性系统

X=solve(A,B)

#解析结果

yn=X[::2]

psi_n=np.arctan2(X[1::2],yn)

#打印结果

print("谐波幅值:",yn)

print("谐波相位:",psi_n)9.2.4解释代码中,我们定义了飞机机翼的动力学参数,并初始化了矩阵A和向量B。通过求解线性系统,我们得到了机翼位移的谐波幅值yn和相位ψ9.3结论谐波平衡法结合线性振动理论为飞机机翼的振动分析提供了一种强大的工具。通过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论