理解几何非线性分析 - 从晾衣服开始(续)
让我们考虑几何非线性和大变形条件,来推导这个问题。我们将一步一步地进行分析:- 弹性模量 E = 200GPa = 200 × 10^9 Pa
在大变形条件下,我们不能使用小角度近似。我们需要考虑钢丝的实际长度变化。在大变形条件下:
tan θ = y / (L/2)
sin θ = y / sqrt((L/2)^2 + y^2)
cos θ = (L/2) / sqrt((L/2)^2 + y^2)真实应变 ε = ln(L' / L),其中 L' 是变形后的长度L' = 2 * sqrt((L/2)^2 + y^2)ε = ln(2 * sqrt((L/2)^2 + y^2) / L)对于大应变,我们可以使用非线性应力-应变关系,如 Ramberg-Osgood 模型。但为简化计算,我们仍使用线性关系:T = σA = EεA = EA * ln(2 * sqrt((L/2)^2 + y^2) / L)2 * [EA * ln(2 * sqrt((L/2)^2 + y^2) / L)] * [y / sqrt((L/2)^2 + y^2)]= mg这个方程是非线性的,无法直接求解。我们需要使用数值方法,如牛顿-拉普森法。设函数 f(y) = 2 * [EA * ln(2 * sqrt((L/2)^2 + y^2) / L)] * [y / sqrt((L/2)^2+ y^2)] - mg使用 Python 的 scipy 库进行数值求解:
importnumpyasnp
fromscipy.optimizeimportfsolve
E =200e9# 弹性模量
A = np.pi * (0.005**2) /4# 横截面积
L =5# 长度
m =5# 质量
g =9.8# 重力加速度
deff(y):
return2* (E * A * np.log(2* np.sqrt((L/2)**2+ y**2) / L)) * (y / np.sqrt((L/2)**2+ y**2)) - m * g
y_solution = fsolve(f,0.05)# 初始猜测值为0.05m
print(f"垂直位移 y = {y_solution[0]:.6f} m")
# 计算张力
T = E * A * np.log(2* np.sqrt((L/2)**2+ y_solution[0]**2) / L)
print(f"张力 T = {T[0]:.2f} N")
运行这段代码,得到结果:
垂直位移 y ≈ 0.057996 m = 58 mm
张力 T ≈ 1056.39 N这些结果与仿真结果(变形57mm,张力1037N)非常接近。结论:
通过考虑几何非线性和大变形条件,我们得到了更准确的结果,与仿真结果基本一致。这表明在处理大变形问题时,考虑非线性效应是至关重要的。
关于变形、轴向力与绳子直径的关系
我们推导出了计算方程,也便知道了变形、轴向力与绳子直径的关系,可以利用Python脚本绘制曲线。脚本如下:
importnumpyasnp
fromscipy.optimizeimportfsolve
importmatplotlib.pyplotasplt
# 常量定义
E =200e9# 弹性模量
L =5# 长度
m =5# 质量
g =9.8# 重力加速度
defcalculate_y_and_T(d):
A = np.pi * (d**2) /4# 横截面积
deff(y):
return2* (E * A * np.log(2* np.sqrt((L/2)**2+ y**2) / L)) * (y / np.sqrt((L/2)**2+ y**2)) - m * g
y_solution = fsolve(f,0.05)[0]# 初始猜测值为0.05m
T = E * A * np.log(2* np.sqrt((L/2)**2+ y_solution**2) / L)
returny_solution, T
# 生成直径范围
diameters = np.linspace(0.001,0.03,300)# 1mm to 10mm
# 计算每个直径对应的变形和轴向力
deformations = []
tensions = []
fordindiameters:
y, T = calculate_y_and_T(d)
deformations.append(y)
tensions.append(T)
# 绘图
plt.figure(figsize=(12,5))
# 变形与直径的关系曲线
plt.subplot(1,2,1)
plt.plot(diameters *1000, np.array(deformations) *1000)
plt.xlabel('直径 (mm)')
plt.ylabel('变形 (mm)')
plt.title('变形与直径的关系')
plt.grid(True)
# 轴向力与直径的关系曲线
plt.subplot(1,2,2)
plt.plot(diameters *1000, tensions)
plt.xlabel('直径 (mm)')
plt.ylabel('轴向力 (N)')
plt.title('轴向力与直径的关系')
plt.grid(True)
plt.tight_layout()
plt.show()
# 输出5mm直径时的结果
d_5mm =0.005
y_5mm, T_5mm = calculate_y_and_T(d_5mm)
print(f"当直径为5mm时:")
print(f"变形 ={y_5mm*1000:.2f}mm")
print(f"轴向力 ={T_5mm:.2f}N")
这段代码会生成以上两个图表:一个显示变形与直径的关系,另一个显示轴向力与直径的关系。变形的趋势是符合的,再看轴向力。。。。。问题来了:为什么轴向力与绳子直径的关系是单调增加的呢?
这是因为:上述方法通过几何关系来计算L‘即绳子伸长量的,对于刚性相对较小的情况是相对准确的,如细绳为棉线,则在载荷作用下,绳子变形后形状为三角形。而实际上,随着绳子直径增加,刚性增强,绳子的变形不再是直线形式,而是曲线,自然伸长量也不能用三角关系式去计算。因此这种方法得到的轴向力与直径的关系是不对的,或者说只在一定范围内精度可接受。至于通用的解析方法,是得花点功夫去推导的。
以下是通过Ansys将绳子半径R参数化,获得的变形和轴向力随直径增加的变化趋势:因为是钢绳,随着直径增加,刚性大幅增加,变形急剧降低,而轴向力在直径14mm时达到最大值,随后直径增加,轴向力减小。