Python摩托艇速度位置计算及绘图项目实现咨询
摩托艇速度与位置计算项目代码调整
原有代码核心问题
- 未导入对应依赖模块,且位置计算函数中误用未定义变量
v,实际应为初速度v0 - 错误使用积分函数
quad计算结果:题目给出的v = v0e^(-bt/m)和p = (mv0/b)(1-e^(-bt/m))*本身就是瞬时速度、瞬时位置关于时间的直接表达式,不需要积分运算 - 缺少离散时间点生成、绘图相关的逻辑实现
调整后完整代码
%matplotlib inline import numpy as np import matplotlib.pyplot as plt # 固定常量 b = 14 # 接收用户输入 v0 = float(input("请输入摩托艇的初速度v0(单位:m/s): ")) m = float(input("请输入摩托艇的质量m(单位:kg): ")) # 生成[0,21]区间的1000个离散时间点,密度足够保证曲线平滑 t = np.linspace(0, 21, 1000) # 批量计算所有时间点对应的速度和位置 v = v0 * np.exp(-b * t / m) p = (m * v0 / b) * (1 - np.exp(-b * t / m)) # 绘图配置 plt.figure(figsize=(10,6)) plt.plot(t, v, color='crimson', linewidth=2, label='速度 (m/s)') plt.plot(t, p, color='navy', linewidth=2, label='位置 (m)') plt.xlabel('时间 t (s)', fontsize=12) plt.ylabel('数值', fontsize=12) plt.title('摩托艇速度与位置随时间变化曲线', fontsize=14, pad=20) plt.legend(fontsize=11) plt.grid(alpha=0.3, linestyle='--') plt.show() # 输出t=20s时的计算结果(符合区间上限设为21以覆盖t=20的要求) v_20 = v0 * np.exp(-b * 20 / m) p_20 = (m * v0 / b) * (1 - np.exp(-b * 20 / m)) print(f"t=20s时,摩托艇的速度为:{v_20:.2f} m/s") print(f"t=20s时,摩托艇的位置为:{p_20:.2f} m")
调整说明
- 保留了用户输入初速度、质量的逻辑,固定常量b=14
- 用
np.linspace生成1000个离散时间点,覆盖[0,21]区间满足计算要求 - 用numpy向量化运算批量计算所有时间点的速度、位置,运算效率更高
- 绘图部分配置了区分度高的线条颜色、完整的图例、标题和坐标轴标签,加了辅助网格提升可读性
- 输出了t=20s时的速度、位置计算结果,也可以根据需要输出所有时间点的对应数值
内容的提问来源于stack exchange,提问作者Jarod O'Neil Q. J Chong
相关产品推荐
相关产品推荐

