编程新手求助:基于SUVA公式迭代计算变加速度下的车辆速度
加速度序列下的速度迭代计算与绘图实现
问题核心
给定含2000个项的加速度列表(数值随速度/阻力动态变化),以初始速度0为起点,通过公式 V²=U²+2as 迭代计算每行驶0.01m后的末速度(该末速度直接作为下一次迭代的初速度),最终绘制速度随位移变化的曲线。
原代码问题修正
你提供的示例代码逻辑有误:count += np.sqrt(u ** 2 + 2*i*s) 是错误的累加方式,正确逻辑应该是每次用前一次的末速度作为下一次的初速度,而非累加平方根结果。
完整实现代码
import numpy as np import matplotlib.pyplot as plt # 示例加速度列表(实际替换为你的2000项列表) acceleration = [1, 2, 3, 4, 5] initial_vel = 0 # 初始速度 step_distance = 0.01 # 每次迭代行驶的距离 def calculate_velocity_sequence(u0, acc_list, s): vel_sequence = [] current_u = u0 for a in acc_list: # 用SUVA公式计算当前步骤的末速度 current_v = np.sqrt(current_u ** 2 + 2 * a * s) vel_sequence.append(current_v) # 更新初速度为当前末速度,用于下一次迭代 current_u = current_v return vel_sequence # 计算速度序列 velocity_list = calculate_velocity_sequence(initial_vel, acceleration, step_distance) # 计算对应的位移序列(每次0.01m,总位移=步数*0.01) displacement_list = np.arange(1, len(velocity_list)+1) * step_distance # 绘制速度-位移曲线 plt.figure(figsize=(10,6)) plt.plot(displacement_list, velocity_list, linewidth=2, color='b') plt.xlabel('位移 (m)') plt.ylabel('速度 (m/s)') plt.title('加速度变化下的速度-位移曲线') plt.grid(True) plt.show()
代码说明
- 迭代逻辑:每次计算完当前末速度后,立即将其赋值给
current_u,作为下一次计算的初速度,完全匹配问题要求的迭代规则。 - 位移计算:通过
np.arange生成与速度序列长度匹配的位移值,每一步对应0.01m的位移增量。 - 绘图部分:用matplotlib绘制平滑曲线,添加坐标轴标签、标题和网格,直观展示速度随位移的变化趋势。
内容的提问来源于stack exchange,提问作者Tom Oliver
相关产品推荐
相关产品推荐

