結(jié)構(gòu)力學(xué)數(shù)值方法:諧波平衡法在結(jié)構(gòu)動(dòng)力學(xué)非線性問(wèn)題中的應(yīng)用_第1頁(yè)
結(jié)構(gòu)力學(xué)數(shù)值方法:諧波平衡法在結(jié)構(gòu)動(dòng)力學(xué)非線性問(wèn)題中的應(yīng)用_第2頁(yè)
結(jié)構(gòu)力學(xué)數(shù)值方法:諧波平衡法在結(jié)構(gòu)動(dòng)力學(xué)非線性問(wèn)題中的應(yīng)用_第3頁(yè)
結(jié)構(gòu)力學(xué)數(shù)值方法:諧波平衡法在結(jié)構(gòu)動(dòng)力學(xué)非線性問(wèn)題中的應(yīng)用_第4頁(yè)
結(jié)構(gòu)力學(xué)數(shù)值方法:諧波平衡法在結(jié)構(gòu)動(dòng)力學(xué)非線性問(wèn)題中的應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

結(jié)構(gòu)力學(xué)數(shù)值方法:諧波平衡法在結(jié)構(gòu)動(dòng)力學(xué)非線性問(wèn)題中的應(yīng)用1緒論1.1非線性動(dòng)力學(xué)問(wèn)題的重要性在結(jié)構(gòu)力學(xué)領(lǐng)域,非線性動(dòng)力學(xué)問(wèn)題的研究至關(guān)重要。這些非線性問(wèn)題通常出現(xiàn)在結(jié)構(gòu)的材料屬性、幾何形狀或邊界條件隨時(shí)間或載荷變化時(shí)。例如,當(dāng)結(jié)構(gòu)承受大變形、大位移或在極端載荷條件下,線性假設(shè)不再適用,非線性效應(yīng)開始顯現(xiàn)。非線性動(dòng)力學(xué)問(wèn)題的準(zhǔn)確分析對(duì)于預(yù)測(cè)結(jié)構(gòu)的動(dòng)態(tài)響應(yīng)、評(píng)估其穩(wěn)定性以及設(shè)計(jì)更安全、更高效的結(jié)構(gòu)至關(guān)重要。1.2諧波平衡法的歷史與現(xiàn)狀諧波平衡法(HarmonicBalanceMethod,HBM)是一種用于求解非線性振動(dòng)問(wèn)題的數(shù)值方法。它最早由Rosenberg在1960年代提出,作為解決非線性系統(tǒng)周期性響應(yīng)的一種手段。HBM的基本思想是將系統(tǒng)的響應(yīng)表示為一系列諧波函數(shù)的線性組合,然后通過(guò)求解一組非線性代數(shù)方程來(lái)確定這些諧波函數(shù)的系數(shù)。隨著時(shí)間的推移,HBM得到了廣泛的發(fā)展和應(yīng)用?,F(xiàn)代HBM不僅能夠處理周期性問(wèn)題,還能應(yīng)用于準(zhǔn)周期性、隨機(jī)性和混沌系統(tǒng)的分析。此外,HBM與其它數(shù)值方法如有限元法、邊界元法等結(jié)合,形成了更強(qiáng)大的分析工具,能夠解決更復(fù)雜、更實(shí)際的工程問(wèn)題。1.2.1示例:使用HBM分析單自由度非線性振動(dòng)系統(tǒng)假設(shè)我們有一個(gè)單自由度非線性振動(dòng)系統(tǒng),其運(yùn)動(dòng)方程可以表示為:m其中,m是質(zhì)量,c是阻尼系數(shù),k是線性剛度,fx是非線性力項(xiàng),F(xiàn)0是外力幅值,ω是外力頻率,我們將系統(tǒng)的響應(yīng)xtx其中,Xn和?n分別是第接下來(lái),我們將運(yùn)動(dòng)方程中的xtPython代碼示例下面是一個(gè)使用Python和SciPy庫(kù)來(lái)求解上述單自由度非線性振動(dòng)系統(tǒng)HBM的簡(jiǎn)化示例。請(qǐng)注意,實(shí)際應(yīng)用中,非線性力項(xiàng)fximportnumpyasnp

fromscipy.optimizeimportfsolve

#定義系統(tǒng)參數(shù)

m=1.0

c=0.1

k=1.0

F0=1.0

omega=1.0

#定義非線性力項(xiàng)

deff(x):

returnx**3

#定義HBM方程

defHBM_equations(p):

X0,X1,phi1=p

eq1=m*X1**2*np.sin(2*phi1)+c*X1*np.sin(phi1)+k*X0+F0-3*X0**2*X1*np.cos(phi1)

eq2=m*X1*omega**2+c*omega*X1*np.cos(phi1)+k*X1*np.cos(phi1)+3*X0**2*X1*np.sin(phi1)-F0*omega*np.sin(omega*0+phi1)

eq3=m*X1*omega**2*np.sin(phi1)-c*omega*X1*np.sin(phi1)-k*X1*np.sin(phi1)-3*X0**2*X1*np.cos(phi1)+F0*omega*np.cos(omega*0+phi1)

return[eq1,eq2,eq3]

#初始猜測(cè)

X0_guess=0.1

X1_guess=0.1

phi1_guess=0.0

#求解HBM方程

X0,X1,phi1=fsolve(HBM_equations,[X0_guess,X1_guess,phi1_guess])

#輸出結(jié)果

print(f"X0:{X0},X1:{X1},phi1:{phi1}")1.2.2解釋在上述代碼中,我們首先定義了系統(tǒng)的物理參數(shù),包括質(zhì)量m、阻尼系數(shù)c、線性剛度k、外力幅值F0和頻率ω。然后,我們定義了非線性力項(xiàng)f接下來(lái),我們定義了HBM方程組,它包含了三個(gè)方程,分別對(duì)應(yīng)于系統(tǒng)響應(yīng)的直流分量、基頻分量和基頻分量的相位。這些方程是通過(guò)將運(yùn)動(dòng)方程中的xt最后,我們使用SciPy庫(kù)中的fsolve函數(shù)來(lái)求解HBM方程組。fsolve函數(shù)需要一個(gè)初始猜測(cè)值,我們?cè)谶@里使用了X0=0.1、X1=0.1和?1這個(gè)示例展示了如何使用HBM來(lái)分析一個(gè)簡(jiǎn)單的非線性振動(dòng)系統(tǒng)。在實(shí)際工程應(yīng)用中,HBM可以擴(kuò)展到更復(fù)雜的多自由度系統(tǒng),以及包含更高階諧波的響應(yīng)表示。2諧波平衡法基礎(chǔ)2.1線性系統(tǒng)的諧波響應(yīng)分析在結(jié)構(gòu)動(dòng)力學(xué)中,線性系統(tǒng)的諧波響應(yīng)分析是理解系統(tǒng)在周期性激勵(lì)下行為的基礎(chǔ)。對(duì)于線性系統(tǒng),其響應(yīng)可以表示為激勵(lì)的線性組合,這使得分析相對(duì)直接。考慮一個(gè)簡(jiǎn)單的單自由度線性系統(tǒng),其運(yùn)動(dòng)方程可以表示為:m其中,m是質(zhì)量,c是阻尼系數(shù),k是剛度,F(xiàn)0是激勵(lì)力的幅值,ω是激勵(lì)頻率,t是時(shí)間,x2.1.1代碼示例假設(shè)我們有一個(gè)單自由度系統(tǒng),參數(shù)為:m=1?kg,c=0.1importnumpyasnp

fromegrateimportsolve_ivp

#定義系統(tǒng)參數(shù)

m=1.0#質(zhì)量

c=0.1#阻尼系數(shù)

k=10.0#剛度

F0=5.0#激勵(lì)力幅值

omega=2.0#激勵(lì)頻率

#定義運(yùn)動(dòng)方程

deflinear_system(t,y):

x,v=y

dxdt=v

dvdt=(-c*v-k*x+F0*np.cos(omega*t))/m

return[dxdt,dvdt]

#初始條件

y0=[0,0]

#時(shí)間范圍

t_span=(0,10)

#求解

sol=solve_ivp(linear_system,t_span,y0,t_eval=np.linspace(0,10,1000))

#繪制結(jié)果

importmatplotlib.pyplotasplt

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

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

plt.legend()

plt.show()此代碼使用了egrate.solve_ivp函數(shù)來(lái)求解線性系統(tǒng)的運(yùn)動(dòng)方程,然后繪制了位移和速度隨時(shí)間變化的曲線。2.2非線性系統(tǒng)的諧波平衡法原理非線性系統(tǒng)的諧波響應(yīng)分析則復(fù)雜得多,因?yàn)榉蔷€性項(xiàng)的存在使得系統(tǒng)的響應(yīng)不再是激勵(lì)的簡(jiǎn)單線性組合。諧波平衡法是一種近似方法,它假設(shè)非線性系統(tǒng)的響應(yīng)可以表示為一系列諧波的組合,然后通過(guò)求解這些諧波的系數(shù)來(lái)近似系統(tǒng)的響應(yīng)??紤]一個(gè)非線性單自由度系統(tǒng),其運(yùn)動(dòng)方程可以表示為:m其中,fx2.2.1代碼示例假設(shè)我們有一個(gè)非線性單自由度系統(tǒng),參數(shù)與線性系統(tǒng)相同,但非線性力項(xiàng)為fximportsympyassp

#定義符號(hào)變量

x,t=sp.symbols('xt')

#定義非線性力項(xiàng)

f=x**3

#假設(shè)響應(yīng)為一系列諧波的組合

x_hb=sp.cos(omega*t)+0.1*sp.cos(3*omega*t)

#將假設(shè)的響應(yīng)代入運(yùn)動(dòng)方程

eq=m*x_hb.diff(t,2)+c*x_hb.diff(t)+k*x_hb+f.subs(x,x_hb)-F0*sp.cos(omega*t)

#求解諧波系數(shù)

coeffs=sp.solve(eq,sp.cos(omega*t),sp.cos(3*omega*t))

#打印結(jié)果

print(coeffs)此代碼使用了sympy庫(kù)來(lái)定義和求解非線性系統(tǒng)的運(yùn)動(dòng)方程。注意,這里的sp.solve函數(shù)用于求解諧波系數(shù),但實(shí)際應(yīng)用中可能需要使用數(shù)值方法來(lái)求解。2.3諧波平衡法的數(shù)學(xué)基礎(chǔ)諧波平衡法的數(shù)學(xué)基礎(chǔ)在于傅里葉級(jí)數(shù)和非線性方程的求解。傅里葉級(jí)數(shù)提供了一種將周期函數(shù)表示為一系列正弦和余弦函數(shù)的方法,這在諧波平衡法中用于表示系統(tǒng)的響應(yīng)。非線性方程的求解則用于確定傅里葉級(jí)數(shù)中各諧波的系數(shù)。2.3.1傅里葉級(jí)數(shù)假設(shè)一個(gè)周期為T的周期函數(shù)ftf其中,an和bab2.3.2非線性方程的求解在諧波平衡法中,非線性方程的求解通常涉及到迭代過(guò)程,如牛頓-拉夫遜方法。假設(shè)我們有一個(gè)非線性方程fxx其中,f′x是2.3.3代碼示例假設(shè)我們有一個(gè)周期函數(shù)ftimportnumpyasnp

fromegrateimportquad

#定義周期函數(shù)

deff(t):

returnnp.sin(t)+np.sin(3*t)

#定義傅里葉系數(shù)計(jì)算函數(shù)

deffourier_coeff(n):

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

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

returna_n,b_n

#計(jì)算前10個(gè)傅里葉系數(shù)

coeffs=[fourier_coeff(n)forninrange(10)]

#打印結(jié)果

print(coeffs)此代碼使用了egrate.quad函數(shù)來(lái)計(jì)算傅里葉系數(shù),然后打印了前10個(gè)傅里葉系數(shù)。注意,這里的周期函數(shù)ft是已知的,但在實(shí)際應(yīng)用中,f3非線性動(dòng)力學(xué)問(wèn)題的建模3.1非線性材料特性在結(jié)構(gòu)動(dòng)力學(xué)中,非線性材料特性是指材料在受力時(shí),其應(yīng)力與應(yīng)變之間的關(guān)系不再遵循線性比例。這種非線性可以由多種因素引起,包括材料的塑性、粘彈性、超彈性等。非線性材料的建模通常需要更復(fù)雜的數(shù)學(xué)描述,例如使用雙曲正切函數(shù)、冪律函數(shù)或更高級(jí)的本構(gòu)模型。3.1.1示例:塑性材料的本構(gòu)模型假設(shè)我們有一個(gè)塑性材料,其應(yīng)力-應(yīng)變關(guān)系可以用簡(jiǎn)單的理想彈塑性模型描述。在Python中,我們可以使用以下代碼來(lái)實(shí)現(xiàn)這一模型:importnumpyasnp

defideal_elastic_plastic_model(strain,E,sigma_y):

"""

理想彈塑性模型計(jì)算應(yīng)力。

參數(shù):

strain:應(yīng)變值

E:材料的彈性模量

sigma_y:材料的屈服應(yīng)力

返回:

stress:計(jì)算得到的應(yīng)力值

"""

ifstrain<0:

stress=-E*strain

elifstrain<=sigma_y/E:

stress=E*strain

else:

stress=sigma_y

returnstress

#示例數(shù)據(jù)

strain_values=np.linspace(-0.01,0.05,100)

E=200e9#彈性模量,單位:Pa

sigma_y=250e6#屈服應(yīng)力,單位:Pa

#計(jì)算應(yīng)力

stress_values=[ideal_elastic_plastic_model(strain,E,sigma_y)forstraininstrain_values]3.2幾何非線性與接觸非線性幾何非線性指的是結(jié)構(gòu)在大變形或大位移時(shí),其幾何形狀的變化對(duì)結(jié)構(gòu)力學(xué)行為的影響。接觸非線性則涉及兩個(gè)或多個(gè)物體在接觸時(shí)的力學(xué)行為,包括摩擦、間隙、碰撞等現(xiàn)象。這些非線性效應(yīng)在結(jié)構(gòu)動(dòng)力學(xué)分析中至關(guān)重要,尤其是在設(shè)計(jì)和分析復(fù)雜機(jī)械系統(tǒng)時(shí)。3.2.1示例:接觸非線性分析在有限元分析軟件中,如ANSYS或ABAQUS,接觸非線性可以通過(guò)定義接觸對(duì)和接觸屬性來(lái)模擬。以下是一個(gè)在ABAQUS中定義接觸對(duì)的示例:#ABAQUS接觸對(duì)定義示例

fromabaqusimport*

fromabaqusConstantsimport*

fromcaeModulesimport*

fromdriverUtilsimportexecuteOnCaeStartup

executeOnCaeStartup()

#創(chuàng)建模型

model=mdb.Model(name='ContactModel')

#定義接觸對(duì)

model.ContactProperty('IntProp-1')

eractionProperty('IntProp-1').TangentialBehavior(formulation=FINITE,

directionality=ISOTROPIC,

slipRateDependency=OFF,

pressureDependency=OFF,

temperatureDependency=OFF,

dependencies=0,

shearStressLimit=None,

maximumElasticSlip=FRACTION,

fraction=0.005,

elasticSlipStiffness=None)

#定義接觸對(duì)

model.SurfaceToSurfaceContactStd(name='Contact-1',

createStepName='Initial',

master='MasterPart',

slave='SlavePart',

sliding=FINITE,

interactionProperty='IntProp-1',

thickness=ON)3.3非線性動(dòng)力學(xué)方程的建立非線性動(dòng)力學(xué)方程的建立是基于牛頓第二定律,即力等于質(zhì)量乘以加速度。在非線性情況下,結(jié)構(gòu)的剛度、阻尼和質(zhì)量矩陣可能隨時(shí)間或位移變化。因此,非線性動(dòng)力學(xué)方程通常需要數(shù)值方法來(lái)求解,如Newmark方法、Runge-Kutta方法或諧波平衡法。3.3.1示例:使用Newmark方法求解非線性動(dòng)力學(xué)方程N(yùn)ewmark方法是一種廣泛用于求解結(jié)構(gòu)動(dòng)力學(xué)方程的數(shù)值積分方法。下面是一個(gè)使用Newmark方法求解非線性動(dòng)力學(xué)方程的Python示例:importnumpyasnp

defnewmark_method(M,C,K,F,u0,v0,dt,t_end):

"""

使用Newmark方法求解非線性動(dòng)力學(xué)方程。

參數(shù):

M:質(zhì)量矩陣

C:阻尼矩陣

K:剛度矩陣

F:外力向量

u0:初始位移

v0:初始速度

dt:時(shí)間步長(zhǎng)

t_end:模擬結(jié)束時(shí)間

返回:

u:位移向量

v:速度向量

a:加速度向量

"""

gamma=0.5

beta=0.25

t=0

u=u0

v=v0

a=np.linalg.solve(M,F(t)-C@v-K@u)

time_steps=int(t_end/dt)

u_hist=np.zeros((time_steps,len(u0)))

v_hist=np.zeros((time_steps,len(v0)))

a_hist=np.zeros((time_steps,len(a)))

foriinrange(time_steps):

u_hist[i]=u

v_hist[i]=v

a_hist[i]=a

t+=dt

u+=v*dt+0.5*a*dt**2

v+=(1-gamma)*a*dt+gamma*dt*np.linalg.solve(M,F(t)-C@(v+dt*a)-K@u)

a=np.linalg.solve(M,F(t)-C@v-K@u)

returnu_hist,v_hist,a_hist

#示例數(shù)據(jù)

M=np.array([[1,0],[0,1]])#質(zhì)量矩陣

C=np.array([[0.1,0],[0,0.1]])#阻尼矩陣

K=np.array([[100,0],[0,100]])#剛度矩陣

F=lambdat:np.array([np.sin(t),np.cos(t)])#外力向量

u0=np.array([0,0])#初始位移

v0=np.array([0,0])#初始速度

dt=0.01#時(shí)間步長(zhǎng)

t_end=10#模擬結(jié)束時(shí)間

#求解非線性動(dòng)力學(xué)方程

u_hist,v_hist,a_hist=newmark_method(M,C,K,F,u0,v0,dt,t_end)以上示例展示了如何在Python中實(shí)現(xiàn)非線性材料的本構(gòu)模型、接觸非線性分析以及使用Newmark方法求解非線性動(dòng)力學(xué)方程。這些方法和模型在結(jié)構(gòu)動(dòng)力學(xué)的非線性問(wèn)題分析中起著關(guān)鍵作用。4諧波平衡法在非線性動(dòng)力學(xué)中的應(yīng)用4.1單自由度非線性系統(tǒng)的諧波平衡分析4.1.1原理諧波平衡法(HarmonicBalanceMethod,HBM)是一種用于求解非線性振動(dòng)系統(tǒng)周期解的數(shù)值方法。對(duì)于單自由度非線性系統(tǒng),其動(dòng)力學(xué)方程可以表示為:m其中,m是質(zhì)量,c是阻尼系數(shù),fx是非線性恢復(fù)力,F(xiàn)0是外力幅值,ω是外力頻率,tHBM的核心思想是將系統(tǒng)的響應(yīng)表示為一系列諧波的線性組合,即:x其中,Xn和?n分別是第n4.1.2內(nèi)容確定系統(tǒng)參數(shù):首先,需要確定系統(tǒng)的質(zhì)量m、阻尼系數(shù)c和非線性恢復(fù)力函數(shù)fx選擇外力參數(shù):設(shè)定外力的幅值F0和頻率ω假設(shè)響應(yīng)形式:假設(shè)系統(tǒng)的響應(yīng)為上述的諧波線性組合形式。代入動(dòng)力學(xué)方程:將假設(shè)的響應(yīng)形式代入動(dòng)力學(xué)方程中,通過(guò)傅里葉級(jí)數(shù)展開,得到關(guān)于Xn和?n求解代數(shù)方程組:使用數(shù)值方法求解得到的代數(shù)方程組,得到各諧波的幅值和相位。重構(gòu)響應(yīng):利用求得的Xn和?4.1.3示例假設(shè)一個(gè)單自由度非線性系統(tǒng),其動(dòng)力學(xué)方程為:x使用Python的scipy庫(kù)進(jìn)行諧波平衡分析:importnumpyasnp

fromscipy.optimizeimportfsolve

#系統(tǒng)參數(shù)

m=1

c=0.1

F0=5

omega=2

#非線性恢復(fù)力函數(shù)

deff(x):

returnx+x**3

#假設(shè)響應(yīng)形式

defx(t,X1,phi1):

returnX1*np.cos(omega*t+phi1)

#代入動(dòng)力學(xué)方程,得到關(guān)于X1和phi1的代數(shù)方程組

defequations(p):

X1,phi1=p

#通過(guò)傅里葉級(jí)數(shù)展開,得到代數(shù)方程組

#這里簡(jiǎn)化為只考慮第一個(gè)諧波

eq1=m*(-omega**2*X1*np.cos(phi1))+c*(-omega*X1*np.sin(phi1))+f(X1*np.cos(phi1))-F0

eq2=m*(omega**2*X1*np.sin(phi1))+c*(omega*X1*np.cos(phi1))

return[eq1,eq2]

#初始猜測(cè)

X1_guess=1

phi1_guess=0

#求解代數(shù)方程組

X1,phi1=fsolve(equations,(X1_guess,phi1_guess))

#輸出結(jié)果

print(f"第一個(gè)諧波的幅值:{X1}")

print(f"第一個(gè)諧波的相位:{phi1}")

#重構(gòu)響應(yīng)

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

response=x(t,X1,phi1)

#繪制響應(yīng)

importmatplotlib.pyplotasplt

plt.plot(t,response)

plt.xlabel('時(shí)間')

plt.ylabel('位移')

plt.title('單自由度非線性系統(tǒng)的諧波平衡響應(yīng)')

plt.show()4.2多自由度非線性系統(tǒng)的諧波平衡法4.2.1原理對(duì)于多自由度非線性系統(tǒng),其動(dòng)力學(xué)方程可以表示為:M其中,M是質(zhì)量矩陣,C是阻尼矩陣,KX是非線性剛度矩陣,F(xiàn)tHBM在多自由度系統(tǒng)中的應(yīng)用與單自由度系統(tǒng)類似,但需要考慮多個(gè)自由度的響應(yīng),即:X其中,Xn和?n分別是第n4.2.2內(nèi)容確定系統(tǒng)參數(shù):包括質(zhì)量矩陣M、阻尼矩陣C和非線性剛度矩陣KX選擇外力參數(shù):設(shè)定外力向量Ft假設(shè)響應(yīng)形式:假設(shè)系統(tǒng)的響應(yīng)為上述的諧波線性組合形式。代入動(dòng)力學(xué)方程:將假設(shè)的響應(yīng)形式代入動(dòng)力學(xué)方程中,通過(guò)傅里葉級(jí)數(shù)展開,得到關(guān)于Xn和?n求解代數(shù)方程組:使用數(shù)值方法求解得到的代數(shù)方程組,得到各諧波的幅值向量和相位向量。重構(gòu)響應(yīng):利用求得的Xn和?4.2.3示例假設(shè)一個(gè)兩自由度非線性系統(tǒng),其動(dòng)力學(xué)方程為:x使用Python的scipy庫(kù)進(jìn)行諧波平衡分析:importnumpyasnp

fromscipy.optimizeimportfsolve

#系統(tǒng)參數(shù)

M=np.array([[1,0],[0,1]])

C=np.array([[0.1,0],[0,0.2]])

F0=np.array([5,3])

omega=2

#非線性恢復(fù)力函數(shù)

deff(X):

returnnp.array([X[0]+X[0]**3,X[1]+X[1]**3])

#假設(shè)響應(yīng)形式

defX(t,X1,phi1,X2,phi2):

returnnp.array([X1*np.cos(omega*t+phi1),X2*np.cos(omega*t+phi2)])

#代入動(dòng)力學(xué)方程,得到關(guān)于X1,phi1,X2,phi2的代數(shù)方程組

defequations(p):

X1,phi1,X2,phi2=p

X=X(t,X1,phi1,X2,phi2)

eq1=np.dot(M,-omega**2*X)+np.dot(C,-omega*X)+f(X)-F0

eq2=np.dot(M,omega**2*X)+np.dot(C,omega*X)

returnnp.concatenate((eq1,eq2))

#初始猜測(cè)

X1_guess=1

phi1_guess=0

X2_guess=1

phi2_guess=0

#求解代數(shù)方程組

X1,phi1,X2,phi2=fsolve(equations,(X1_guess,phi1_guess,X2_guess,phi2_guess))

#輸出結(jié)果

print(f"第一個(gè)諧波的幅值向量:{np.array([X1,X2])}")

print(f"第一個(gè)諧波的相位向量:{np.array([phi1,phi2])}")

#重構(gòu)響應(yīng)

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

response=X(t,X1,phi1,X2,phi2)

#繪制響應(yīng)

importmatplotlib.pyplotasplt

plt.plot(t,response[:,0],label='自由度1')

plt.plot(t,response[:,1],label='自由度2')

plt.xlabel('時(shí)間')

plt.ylabel('位移')

plt.title('多自由度非線性系統(tǒng)的諧波平衡響應(yīng)')

plt.legend()

plt.show()4.3復(fù)雜結(jié)構(gòu)的非線性動(dòng)力學(xué)分析4.3.1原理在復(fù)雜結(jié)構(gòu)的非線性動(dòng)力學(xué)分析中,諧波平衡法可以用于求解具有多個(gè)非線性元件的結(jié)構(gòu)的周期響應(yīng)。這通常涉及到將結(jié)構(gòu)離散化為多個(gè)自由度,每個(gè)自由度可能具有不同的非線性特性。4.3.2內(nèi)容結(jié)構(gòu)離散化:將復(fù)雜結(jié)構(gòu)離散化為多個(gè)自由度。確定非線性元件:識(shí)別結(jié)構(gòu)中的非線性元件,確定其非線性恢復(fù)力函數(shù)。建立動(dòng)力學(xué)方程:基于離散化后的自由度,建立動(dòng)力學(xué)方程。應(yīng)用諧波平衡法:對(duì)每個(gè)自由度應(yīng)用諧波平衡法,求解其周期響應(yīng)。重構(gòu)整體響應(yīng):將每個(gè)自由度的響應(yīng)組合起來(lái),重構(gòu)整個(gè)結(jié)構(gòu)的響應(yīng)。4.3.3示例假設(shè)一個(gè)具有三個(gè)自由度的復(fù)雜結(jié)構(gòu),其中包含兩個(gè)非線性彈簧,其動(dòng)力學(xué)方程為:x使用Python的scipy庫(kù)進(jìn)行諧波平衡分析:importnumpyasnp

fromscipy.optimizeimportfsolve

#系統(tǒng)參數(shù)

M=np.array([[1,0,0],[0,1,0],[0,0,1]])

C=np.array([[0.1,0,0],[0,0.2,0],[0,0,0.3]])

F0=np.array([5,3,2])

omega=2

#非線性恢復(fù)力函數(shù)

deff(X):

returnnp.array([X[0]+X[0]**3,X[1]+X[1]**3,X[2]+X[2]**3])

#假設(shè)響應(yīng)形式

defX(t,X1,phi1,X2,phi2,X3,phi3):

returnnp.array([X1*np.cos(omega*t+phi1),X2*np.cos(omega*t+phi2),X3*np.cos(omega*t+phi3)])

#代入動(dòng)力學(xué)方程,得到關(guān)于X1,phi1,X2,phi2,X3,phi3的代數(shù)方程組

defequations(p):

X1,phi1,X2,phi2,X3,phi3=p

X=X(t,X1,phi1,X2,phi2,X3,phi3)

eq1=np.dot(M,-omega**2*X)+np.dot(C,-omega*X)+f(X)-F0

eq2=np.dot(M,omega**2*X)+np.dot(C,omega*X)

returnnp.concatenate((eq1,eq2))

#初始猜測(cè)

X1_guess=1

phi1_guess=0

X2_guess=1

phi2_guess=0

X3_guess=1

phi3_guess=0

#求解代數(shù)方程組

X1,phi1,X2,phi2,X3,phi3=fsolve(equations,(X1_guess,phi1_guess,X2_guess,phi2_guess,X3_guess,phi3_guess))

#輸出結(jié)果

print(f"第一個(gè)諧波的幅值向量:{np.array([X1,X2,X3])}")

print(f"第一個(gè)諧波的相位向量:{np.array([phi1,phi2,phi3])}")

#重構(gòu)響應(yīng)

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

response=X(t,X1,phi1,X2,phi2,X3,phi3)

#繪制響應(yīng)

importmatplotlib.pyplotasplt

plt.plot(t,response[:,0],label='自由度1')

plt.plot(t,response[:,1],label='自由度2')

plt.plot(t,response[:,2],label='自由度3')

plt.xlabel('時(shí)間')

plt.ylabel('位移')

plt.title('復(fù)雜結(jié)構(gòu)的非線性動(dòng)力學(xué)響應(yīng)')

plt.legend()

plt.show()以上示例展示了如何使用諧波平衡法分析單自由度、多自由度以及復(fù)雜結(jié)構(gòu)的非線性動(dòng)力學(xué)問(wèn)題。通過(guò)將系統(tǒng)的響應(yīng)表示為一系列諧波的線性組合,HBM能夠有效地求解非線性振動(dòng)系統(tǒng)的周期解。5數(shù)值實(shí)現(xiàn)與案例研究5.1諧波平衡法的數(shù)值實(shí)現(xiàn)步驟諧波平衡法(HarmonicBalanceMethod,HBM)是一種用于求解非線性動(dòng)力學(xué)問(wèn)題的有效數(shù)值方法。它通過(guò)將非線性系統(tǒng)的響應(yīng)表示為一系列諧波函數(shù)的線性組合,然后利用傅里葉級(jí)數(shù)展開,將時(shí)域問(wèn)題轉(zhuǎn)換為頻域問(wèn)題,從而簡(jiǎn)化了非線性方程的求解過(guò)程。下面,我們將詳細(xì)介紹諧波平衡法的數(shù)值實(shí)現(xiàn)步驟,并通過(guò)一個(gè)具體的案例來(lái)展示其應(yīng)用。5.1.1步驟1:?jiǎn)栴}的數(shù)學(xué)建模首先,需要建立非線性動(dòng)力學(xué)問(wèn)題的數(shù)學(xué)模型。假設(shè)我們有一個(gè)非線性振動(dòng)系統(tǒng),其運(yùn)動(dòng)方程可以表示為:m其中,m是質(zhì)量,c是阻尼系數(shù),fx是非線性恢復(fù)力,F(xiàn)5.1.2步驟2:諧波響應(yīng)假設(shè)假設(shè)系統(tǒng)的響應(yīng)xtx其中,Xn是振幅,?n是相位角,5.1.3步驟3:傅里葉級(jí)數(shù)展開將非線性恢復(fù)力fx和外部激勵(lì)力FfF5.1.4步驟4:代入并求解將步驟2和步驟3中的表達(dá)式代入原始運(yùn)動(dòng)方程中,然后利用諧波平衡原理,即在每個(gè)頻率上,恢復(fù)力的諧波分量與外部激勵(lì)力的諧波分量相平衡,求解振幅Xn和相位角?5.1.5步驟5:結(jié)果驗(yàn)證最后,將求得的振幅和相位角代回諧波響應(yīng)假設(shè)中,得到系統(tǒng)的響應(yīng)xt5.2案例分析:橋梁結(jié)構(gòu)的非線性動(dòng)力學(xué)響應(yīng)假設(shè)我們有一座橋梁,其非線性動(dòng)力學(xué)模型可以簡(jiǎn)化為一個(gè)單自由度系統(tǒng),受到周期性風(fēng)載荷的激勵(lì)。橋梁的運(yùn)動(dòng)方程可以表示為:m其中,m=1000kg,c=100Ns/5.2.1數(shù)值實(shí)現(xiàn)使用Python和SciPy庫(kù),我們可以實(shí)現(xiàn)諧波平衡法來(lái)求解橋梁的非線性動(dòng)力學(xué)響應(yīng)。importnumpyasnp

fromscipy.optimizeimportfsolve

#參數(shù)定義

m=1000.0

c=100.0

k=1e6

alpha=1e3

F0=1e4

omega=0.1*np.pi

#諧波平衡法求解函數(shù)

defharmonic_balance(X,phi):

#求解振幅和相位角

x=X[0]*np.cos(omega*t+phi[0])

x_dot=-omega*X[0]*np.sin(omega*t+phi[0])

x_ddot=-omega**2*X[0]*np.cos(omega*t+phi[0])

#非線性恢復(fù)力

f_x=k*x+alpha*x**3

#動(dòng)力學(xué)方程

eq=m*x_ddot+c*x_dot+f_x-F0*np.cos(omega*t)

#求解傅里葉系數(shù)

eq_fft=np.fft.fft(eq)

#諧波平衡條件

balance=np.abs(eq_fft[1])#只考慮第一個(gè)諧波分量

returnbalance

#初始猜測(cè)

X_guess=[1.0]

phi_guess=[0.0]

#時(shí)間向量

t=np.linspace(0,100,10000)

#求解振幅和相位角

X,phi=fsolve(harmonic_balance,(X_guess,phi_guess))

#計(jì)算響應(yīng)

x=X*np.cos(omega*t+phi)

#繪制結(jié)果

importmatplotlib.pyplotasplt

plt.figure()

plt.plot(t,x)

plt.xlabel('時(shí)間(s)')

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

plt.title('橋梁的非線性動(dòng)力學(xué)響應(yīng)')

plt.show()5.2.2結(jié)果分析通過(guò)上述代碼,我們可以得到橋梁在周期性風(fēng)載荷作用下的非線性動(dòng)力學(xué)響應(yīng)。結(jié)果表明,諧波平衡法能夠有效地求解非線性系統(tǒng)的響應(yīng),為橋梁結(jié)構(gòu)的動(dòng)態(tài)分析提供了一種可行的數(shù)值方法。5.3案例分析:風(fēng)力發(fā)電機(jī)葉片的非線性振動(dòng)風(fēng)力發(fā)電機(jī)葉片在運(yùn)行過(guò)程中會(huì)受到風(fēng)速變化、重力和旋轉(zhuǎn)效應(yīng)的影響,產(chǎn)生復(fù)雜的非線性振動(dòng)。假設(shè)我們有一個(gè)風(fēng)力發(fā)電機(jī)葉片,其非線性振動(dòng)模型可以表示為:m其中,m=100kg,c=10N5.3.1數(shù)值實(shí)現(xiàn)同樣使用Python和SciPy庫(kù),我們可以實(shí)現(xiàn)諧波平衡法來(lái)求解風(fēng)力發(fā)電機(jī)葉片的非線性振動(dòng)。#參數(shù)定義

m=100.0

c=10.0

k=1e4

beta=10.0

#外部激勵(lì)力

defF(t):

return1000*np.sin(0.2*np.pi*t)

#諧波平衡法求解函數(shù)

defharmonic_balance(X,phi):

#求解振幅和相位角

x=X[0]*np.cos(omega*t+phi[0])

x_dot=-omega*X[0]*np.sin(omega*t+phi[0])

x_ddot=-omega**2*X[0]*np.cos(omega*t+phi[0])

#非線性恢復(fù)力

f_x=k*x+beta*x**2*x_dot

#動(dòng)力學(xué)方程

eq=m*x_ddot+c*x_dot+f_x-F(t)

#求解傅里葉系數(shù)

eq_fft=np.fft.fft(eq)

#諧波平衡條件

balance=np.abs(eq_fft[1])#只考慮第一個(gè)諧波分量

returnbalance

#初始猜測(cè)

X_guess=[1.0]

phi_guess=[0.0]

#時(shí)間向量

t=np.linspace(0,100,10000)

#求解振幅和相位角

X,phi=fsolve(harmonic_balance,(X_guess,phi_guess))

#計(jì)算響應(yīng)

x=X*np.cos(omega*t+phi)

#繪制結(jié)果

plt.figure()

plt.plot(t,x)

plt.xlabel('時(shí)間(s)')

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

plt.title('風(fēng)力發(fā)電機(jī)葉片的非線性振動(dòng)')

plt.show()5.3.2結(jié)果分析通過(guò)諧波平衡法,我們得到了風(fēng)力發(fā)電機(jī)葉片在風(fēng)載荷作用下的非線性振動(dòng)響應(yīng)。結(jié)果表明,該方法能夠準(zhǔn)確地捕捉到葉片的非線性振動(dòng)特性,為風(fēng)力發(fā)電機(jī)的設(shè)計(jì)和優(yōu)化提供了重要的參考。以上兩個(gè)案例展示了諧波平衡法在結(jié)構(gòu)動(dòng)力學(xué)中的應(yīng)用,通過(guò)將非線性問(wèn)題轉(zhuǎn)換為頻域問(wèn)題,諧波平衡法能夠有效地求解非線性系統(tǒng)的響應(yīng),為工程實(shí)踐提供了有力的工具。6諧波平衡法的局限性與改進(jìn)6.1諧波平衡法的局限性分析諧波平衡法(HarmonicBalanceMethod,HBM)在處理結(jié)構(gòu)動(dòng)力學(xué)中的非線性問(wèn)題時(shí),是一種有效且廣泛應(yīng)用的數(shù)值方法。然而,它并非沒(méi)有局限性。HBM基于傅里葉級(jí)數(shù)展開,將非線性系統(tǒng)的響應(yīng)表示為一系列諧波的組合。這種方法在處理弱非線性系統(tǒng)時(shí)效果顯著,但在面對(duì)強(qiáng)非線性或復(fù)雜非線性系統(tǒng)時(shí),其局限性開始顯現(xiàn)。6.1.1局限性1:諧波截?cái)嗾`差HBM的準(zhǔn)確性依賴于諧波項(xiàng)的截?cái)唷T趯?shí)際應(yīng)用中,通常只保留有限數(shù)量的諧波項(xiàng),這會(huì)導(dǎo)致截?cái)嗾`差。對(duì)于強(qiáng)非線性系統(tǒng),低階諧波可能不足以準(zhǔn)確描述系統(tǒng)的響應(yīng),需要更多的高階諧波項(xiàng),這會(huì)增加計(jì)算的復(fù)雜性和時(shí)間。6.1.2局限性2:收斂性問(wèn)題在某些情況下,HBM的解可能不收斂,尤其是在系統(tǒng)具有復(fù)雜的非線性特性時(shí)。這可能需要更復(fù)雜的算法來(lái)確保收斂,或者采用其他數(shù)值方法。6.1.3局限性3:初始條件敏感性HBM的結(jié)果可能對(duì)初始條件非常敏感。在非線性系統(tǒng)中,不同的初始條件可能導(dǎo)致完全不同的響應(yīng),而HBM可能無(wú)法捕捉到所有可能的響應(yīng)模式。6.2改進(jìn)方法:高階諧波平衡法為了解決上述局限性,特別是諧波截?cái)嗾`差和收斂性問(wèn)題,高階諧波平衡法(HigherOrderHarmonicBalanceMethod,HOHBM)被提出。HOHBM通過(guò)增加諧波項(xiàng)的數(shù)量,更準(zhǔn)確地描述非線性系統(tǒng)的響應(yīng),從而提高解的精度。6.2.1實(shí)現(xiàn)步驟傅里葉級(jí)數(shù)展開:將非線性系統(tǒng)的響應(yīng)表示為更多諧波項(xiàng)的組合。非線性方程組求解:使用迭代方法求解由傅里葉級(jí)數(shù)展開得到的非線性方程組,直到滿足收斂準(zhǔn)則。誤差評(píng)估:評(píng)估解的誤差,如果誤差過(guò)大,則增加諧波項(xiàng)的數(shù)量,重新求解。6.2.2代碼示例假設(shè)我們有一個(gè)非線性振動(dòng)系統(tǒng),其運(yùn)動(dòng)方程為:m使用Python和scipy庫(kù),我們可以實(shí)現(xiàn)HOHBM來(lái)求解這個(gè)系統(tǒng)。importnumpyasnp

fromscipy.optimizeimportfsolve

#系統(tǒng)參數(shù)

m=1.0

c=0.1

k=1.0

alpha=0.1

F0=1.0

omega=1.0

#諧波項(xiàng)數(shù)量

N=5

#定義未知數(shù)

a=np.zeros(N)

b=np.zeros(N)

#定義非線性方程組

defequations(p):

a,b=p

eqs=[]

forninrange(1,N+1):

eqs.append(-m*(n*omega)**2*a[n-1]-c*n*omega*b[n-1]-k*a[n-1]-alpha*(a[0]**3+3*a[0]*(b[0]**2))+F0*(n==1))

eqs.append(-m*(n*omega)**2*b[n-1]+c*n*omega*a[n-1]-k*b[n-1]-alpha*(3*a[0]**2*b[0]+3*(b[0]**2)*a[n-1]))

returneqs

#初始猜測(cè)

p0=np.zeros(2*N)

#求解非線性方程組

sol=fsolve(equations,p0)

#解析解

a=sol[:N]

b=sol[N:]

#打印結(jié)果

print("振幅系數(shù)a:",a)

print("速度系數(shù)b:",b)6.2.3解釋上述代碼中,我們首先定義了系統(tǒng)的參數(shù)和諧波項(xiàng)的數(shù)量。然后,我們使用fsolve函數(shù)來(lái)求解由傅里葉級(jí)數(shù)展開得到的非線性方程組。最后,我們打印出振幅系數(shù)和速度系數(shù),這些系數(shù)可以用來(lái)構(gòu)建系統(tǒng)的響應(yīng)。6.3改進(jìn)方法:時(shí)域與頻域結(jié)合分析另一種改進(jìn)HBM的方法是結(jié)合時(shí)域和頻域分析。這種方法試圖在時(shí)域中捕捉系統(tǒng)的瞬態(tài)響應(yīng),同時(shí)在頻域中分析系統(tǒng)的穩(wěn)態(tài)響應(yīng)。通過(guò)結(jié)合兩種分析,可以更全面地理解非線性系統(tǒng)的動(dòng)態(tài)特性。6.3.1實(shí)現(xiàn)步驟時(shí)域分析:使用時(shí)域數(shù)值方法(如Runge-Kutta方法)求解系統(tǒng)的瞬態(tài)響應(yīng)。頻域分析:將時(shí)域響應(yīng)轉(zhuǎn)換到頻域,使用HBM分析系統(tǒng)的穩(wěn)態(tài)響應(yīng)。結(jié)果融合:結(jié)合瞬態(tài)響應(yīng)和穩(wěn)態(tài)響應(yīng),得到系統(tǒng)的完整動(dòng)態(tài)特性。6.3.2代碼示例使用Python和scipy庫(kù),我們可以實(shí)現(xiàn)時(shí)域與頻域結(jié)合分析。importnumpyasnp

fromegrateimportsolve_ivp

fromscipy.fftpackimportfft

#系統(tǒng)參數(shù)

m=1.0

c=0.1

k=1.0

alpha=0.1

F0=1.0

omega=1.0

#定義時(shí)域方程

defderiv(t,y):

x,v=y

dxdt=v

dvdt=(-c*v-k*x-alpha*x**3+F0*np.cos(omega*t))/m

return[dxdt,dvdt]

#初始條件

y0=[0,0]

#時(shí)間范圍

t_span=(0,100)

t_eval=np.linspace(t_span[0],t_span[1],1000)

#求解時(shí)域方程

sol=solve_ivp(deriv,t_span,y0,t_eval=t_eval)

#將時(shí)域響應(yīng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論