一:基础知识
- 胡克定理:
- 牛顿第二定律:
- 阻尼公式:
,其中B为阻力系数,是与速度有关的公式
二:内容简介
通过python代码创建弹簧震动系统的运动模型。 分析一个简单的数学建模模型,可以为复杂的建模提供思路
三:分析
模型可视化:时间和Δx的关系曲线图
要呈现整个弹簧的运动过程,相对位移Δx最能体现弹簧能力衰竭的过程。
任意i时刻公式分析:
四:代码思路
1、输入初始条件:
弹簧末端物体的重量mass,弹簧初始位移initial_displacemnt,弹簧初始速度nitial_velocity,时间的间隔(时间步长)time_step,总步数num_steps,弹簧弹性系数spring_constant,弹簧阻尼系数damping_coefficient。
2、在任意时刻:
根据 得加速度
根据 得速度
根据 得位移量(带方向)
时间可由时间间隔和时间步长求得
3、将任意时刻的时间和添加到x轴和y轴,用matplotlib绘图
五:具体代码如下(关注即可复制下载)
如果代码不能复制粘贴,可关注抖音:yibinfuzi,私信免费获取。
def spring_simulation(mass, spring_constant, damping_coefficient, initial_displacement, initial_velocity, num_steps, time_step):
displacements = np.zeros(num_steps)
velocities = np.zeros(num_steps)
accelerations = np.zeros(num_steps)
#初始化
displacements[0] = initial_displacement
velocities[0] = initial_velocity
for i in range(1, num_steps):
# 计算加速度
accelerations[i] = (-spring_constant * displacements[i-1] - damping_coefficient * velocities[i-1]) / mass
# 更新速度和位移
velocities[i] = velocities[i-1] + accelerations[i] * time_step
displacements[i] = displacements[i-1] + velocities[i] * time_step
return displacements
# 模拟参数
mass = 1.0 # 质量(kg)
spring_constant = 10.0 # 弹簧常数(N/m)
damping_coefficient = 0.5 # 阻尼系数(Ns/m)
initial_displacement = 1.0 # 初始位移(m)
initial_velocity = 0.0 # 初始速度(m/s)
num_steps = 1000 # 模拟步数
time_step = 0.01 # 时间步长(s)
# 进行弹簧振动系统模拟
displacements = spring_simulation(mass, spring_constant, damping_coefficient, initial_displacement, initial_velocity, num_steps, time_step)
# 绘制位移随时间变化的图像
time = np.arange(0, num_steps * time_step, time_step)
plt.plot(time, displacements)
plt.xlabel('Time (s)')
plt.ylabel('Displacement (m)')
plt.title('Spring Oscillation Simulation')
plt.grid(True)
plt.show()
结果展示:
time_step越低,则曲线越光滑,精度也越高。纵坐标是相对未受力弹簧的形变量
六:总结
- 可以自定义迭代多少步,数据点使用list = np.zeros(num_steps)收集
- 建模的重点是对已知方程的解析。分析出一个对任意时刻都通用的公式。类似数学统计法,经由一个表达式(已知方程)
,推导出一个公式在i=0,i=1处都适用,则该公式就是适用任意时刻(位移)处的通式。
- 建模首先需要确定模型展示方式。即确定图形横纵坐标的意义。
作者是石油工程专业研究生,方向为.油气工程信息化与智能化技术。正在自学数值模拟和神经网络,欢迎一起交流学习python数值模拟和神经网络相关内容。如代码未能复制粘贴,可关注抖音:yibinfuzi,私信获取代码。