area=(diameter/2)**2*3.14159#计算截面积,单位:平方毫米
#计算应力
stress=force/area#应力,单位:帕斯卡
longitudinal_strain=0.01#纵向应变
lateral_strain=-0.003#横向应变,负号表示收缩
#计算泊松比
poisson_ratio=abs(lateral_strain/longitudinal_strain)
fromscipy.optimizeimportminimize
#定义自由能函数
deffree_energy(phi,params):
"""
自由能函数,用于描述相变过程。
phi:相场变量,表示相的分布。
params:模型参数,包括弹性模量、相变温度等。
elastic_energy=params['elastic_modulus']*phi**2
phase_energy=params['phase_energy']*(phi-0.5)**2
returnnp.sum(elastic_energy+phase_energy)
#定义材料参数
params={
'elastic_modulus':100,#弹性模量
'phase_energy':10#相变能量
}
#初始相场分布
phi0=np.random.rand(100)
#使用最小化算法求解自由能最小化问题
result=minimize(free_energy,phi0,args=(params),method='L-BFGS-B')
#输出最终相场分布
importmatplotlib.pyplotasplt
#创建数据框
data={'Strain(%)':[0,1,2,3,4,5,100],
'Stress(MPa)':[0,0.5,1.2,2.0,3.0,4.0,500]}
df=pd.DataFrame(data)
#绘制应力-应变曲线
plt.figure(figsize=(10,6))
plt.plot(df['Strain(%)'],df['Stress(MPa)'],marker='o')
plt.title('Stress-StrainCurveofaSuperelasticMaterial')
plt.xlabel('Strain(%)')
plt.ylabel('Stress(MPa)')
plt.grid(True)
plt.show()3.22应力-应变曲线分析应力-应变曲线是分析超弹性材料性能的关键。对于超弹性材料,曲线通常表现出以下特征:线性弹性区:在小应变范围内,应力与应变成正比,符合胡克定律。屈服点:超弹性材料在达到一定应变后,应力不再增加,即使应变继续增加,这称为屈服点。超弹性区:在屈服点之后,材料表现出可逆的变形,即使在大应变下,当载荷去除后,材料能够恢复到其原始形状。伪弹性区:在某些超弹性材料中,应力-应变曲线在屈服点后表现出锯齿状,这是由于材料内部的相变引起的。3.2.1示例:分析应力-应变曲线假设我们有以下的应力-应变数据:importnumpyasnp
#生成模拟数据
strain=np.linspace(0,100,100)
stress=np.sin(strain/100*2*np.pi)*500+500
#使用numpy和matplotlib进行分析和可视化
plt.plot(strain,stress,label='Stress-StrainCurve')
plt.title('AnalysisofStress-StrainCurve')
plt.legend()
plt.show()3.33超弹性与伪弹性现象超弹性材料的超弹性和伪弹性现象是其独特性能的体现。超弹性是指材料在大应变下仍能保持可逆变形的能力,而伪弹性则是在材料的相变过程中出现的非线性应力-应变行为。3.3.1超弹性超弹性材料,如镍钛合金,能够在大应变下变形,然后在去除载荷后完全恢复其原始形状。这种性能是由于材料内部的相变机制,使得材料能够在马氏体相和奥氏体相之间转换,从而实现可逆变形。3.3.2伪弹性伪弹性现象发生在超弹性材料的相变过程中。当材料受到应力时,相变从一个相到另一个相,导致应力-应变曲线出现锯齿状。这种现象在材料的循环加载过程中尤为明显,每次加载和卸载都会产生不同的应力-应变曲线,显示出材料的耗散能量。3.3.3示例:伪弹性现象的模拟我们可以使用一个简单的数学模型来模拟伪弹性现象,例如使用一个带有滞后效应的应力-应变关系:importnumpyasnp
#定义伪弹性模型
defpseudo_elastic_model(strain,stress_max=500,strain_max=100):
ifstrain stress=stress_max*strain/strain_max else: stress=stress_max*(1-(strain-strain_max/2)/strain_max) returnstress #生成数据 stress=[pseudo_elastic_model(s)forsinstrain] #可视化 plt.plot(strain,stress,label='Pseudo-elasticModel') plt.title('SimulationofPseudo-elasticPhenomenon') plt.show()通过这些测量方法、曲线分析和现象模拟,我们可以深入理解超弹性材料的宏观性能,为材料的工程应用提供理论基础。4超弹性材料的本构模型4.11本构模型的建立原则在建立超弹性材料的本构模型时,主要遵循以下原则:能量守恒:模型应确保在材料变形过程中能量守恒,即外力所做的功等于材料内部能量的变化。可逆性:超弹性材料的变形在去除外力后应能完全恢复,模型需体现这一特性。非线性:超弹性材料的应力-应变关系通常是非线性的,模型应能准确描述这种非线性行为。温度依赖性:超弹性材料的性能可能随温度变化,模型应考虑温度对材料性能的影响。历史依赖性:某些超弹性材料的性能可能依赖于其变形历史,模型需考虑这一因素。4.22超弹性材料的非线性弹性模型4.2.12.1Neo-Hookean模型Neo-Hookean模型是一种常用的超弹性材料非线性弹性模型,它基于能量密度函数来描述材料的应力-应变关系。模型假设材料的能量密度函数仅依赖于第一不变量,即体积不变形的弹性变形。4.2.1.1公式W其中,W是能量密度,μ是剪切模量,λ是体积模量,C是右Cauchy-Green应变张量,J是变形梯度的行列式。4.2.1.2代码示例importnumpyasnp defneo_hookean_energy_density(C,mu,lambda_): 计算Neo-Hookean模型的能量密度。 参数: C:右Cauchy-Green应变张量 mu:剪切模量 lambda_:体积模量 返回: W:能量密度 J=np.linalg.det(C) trC=np.trace(C) W=0.5*mu*(trC-3)-mu*np.log(J)+0.5*lambda_*(np.log(J))**2 returnW #示例数据 C=np.array([[1.2,0.0,0.0], [0.0,1.1,0.0], [0.0,0.0,0.9]]) mu=100.0 lambda_=1000.0 #计算能量密度 W=neo_hookean_energy_density(C,mu,lambda_) print("能量密度W=",W)4.2.22.2Mooney-Rivlin模型Mooney-Rivlin模型是另一种非线性弹性模型,它假设能量密度函数依赖于第一和第二不变量。4.2.2.1公式W其中,μ1和μ4.2.2.2代码示例defmooney_rivlin_energy_density(C,mu1,mu2): 计算Mooney-Rivlin模型的能量密度。 mu1:第一个材料参数 mu2:第二个材料参数 trC_inv=np.trace(np.linalg.inv(C)) W=0.5*mu1*(trC-3)+mu2*(trC_inv-3) C=np.array([[1.3,0.0,0.0], [0.0,1.2,0.0], [0.0,0.0,0.8]]) mu1=150.0 mu2=50.0 W=mooney_rivlin_energy_density(C,mu1,mu2) print("能量密度W=",W)4.33本构模型的参数确定确定超弹性材料本构模型的参数通常需要实验数据。以下是一种基于实验数据确定Neo-Hookean模型参数的方法。4.3.13.1实验数据拟合4.3.1.1代码示例importnumpyasnp fromscipy.optimizeimportcurve_fit defneo_hookean_stress(C,mu,lambda_): 计算Neo-Hookean模型的应力。 S:第二Piola-Kirchhoff应力张量 S=mu*(C-np.eye(3)*(1/J))+lambda_*np.log(J)*np.eye(3) returnS #实验数据 C_data=np.array([[[1.2,0.0,0.0], [0.0,0.0,0.9]], [[1.5,0.0,0.0], [0.0,1.4,0.0], [0.0,0.0,0.6]]]) S_data=np.array([[[100.0,0.0,0.0], [0.0,90.0,0.0], [0.0,0.0,-190.0]], [[150.0,0.0,0.0], [0.0,140.0,0.0], [0.0,0.0,-290.0]]]) #拟合参数 deffit_neo_hookean(C,mu,lambda_): S=neo_hookean_stress(C,mu,lambda_) returnS.flatten() popt,pcov=curve_fit(fit_neo_hookean,C_data,S_data.flatten()) mu_fit,lambda_fit=popt print("拟合得到的剪切模量mu=",mu_fit) print("拟合得到的体积模量lambda=",lambda_fit)4.3.23.2参数的物理意义剪切模量μ:反映材料抵抗剪切变形的能力。体积模量λ:反映材料抵抗体积变化的能力。4.3.33.3参数的敏感性分析参数的敏感性分析有助于理解模型参数对材料宏观性能的影响。通过改变参数值并观察模型输出的变化,可以评估参数的敏感性。4.3.3.1代码示例defsensitivity_analysis(C,mu,lambda_,delta=0.01): 进行参数敏感性分析。 delta:参数变化量 dW_dmu:能量密度对剪切模量的敏感性 dW_dlambda:能量密度对体积模量的敏感性 W_base=neo_hookean_energy_density(C,mu,lambda_) dW_dmu=(neo_hookean_energy_density(C,mu+delta,lambda_)-W_base)/delta dW_dlambda=(neo_hookean_energy_density(C,mu,lambda_+delta)-W_base)/delta