Python 中的弹丸运动:如何生成随时间变化的垂直速度列表?
Projectile Motion in Python: How to generate list giving vertical velocity over time?
我试图找出随着阻力垂直下落的球形粒子的垂直速度 Vy 如何随时间 t 变化。我想生成一个值列表,说明从发布到某些时间点的几个时间点的 Vy 是什么 t_max 以及绘制 Vy 与时间的关系。
我得到的用于求解 ∆Vy 的方程是:
dVy = -g*dt - (b/m)*Vy*dt
我得到了一个查找值的建议算法
"The code should ask for the values of m, g, b and ∆t. Once these values are defined, the code should provide a series of values of Vy for each time t."
这是我目前的尝试:
import numpy as np
import matplotlib.pyplot as plt
import math
g = 9.81 #acceleration due to gravity
b = 1.6*10**-8 #linear drag coefficient
m = 1.04*10**-9 #mass of particle
dt = 10**-3 #time step
t_max = 10 #final time
t = 0 #initial time
Vy = 0 #initial velocity
t_list = [t]
Vy_list = [Vy]
dVy = -g*dt - (b/m)*Vy*dt
while t <= t_max:
t += dt
Vy += dVy
t_list.append(t)
Vy_list.append(Vy)
print(t, Vy)
plt.plot(t_list, Vy_list)
plt.show()
我不确定它生成的值是否正确,考虑到无论我将质量设置为多大,速度的变化都保持不变,而我预计它会对速度产生相当大的影响无穷小的质量。
我承认我正在复制针对完全不同的问题提供给我的解决方案,但我认为 while 循环是正确的方法吗?
您需要在 while 循环中更新 dVy:
while t <= t_max:
dVy = -g*dt - (b/m)*Vy*dt
t += dt
Vy += dVy
否则它将是一个常量,不会像您预期的那样随时间更新。
我试图找出随着阻力垂直下落的球形粒子的垂直速度 Vy 如何随时间 t 变化。我想生成一个值列表,说明从发布到某些时间点的几个时间点的 Vy 是什么 t_max 以及绘制 Vy 与时间的关系。
我得到的用于求解 ∆Vy 的方程是:
dVy = -g*dt - (b/m)*Vy*dt
我得到了一个查找值的建议算法
"The code should ask for the values of m, g, b and ∆t. Once these values are defined, the code should provide a series of values of Vy for each time t."
这是我目前的尝试:
import numpy as np
import matplotlib.pyplot as plt
import math
g = 9.81 #acceleration due to gravity
b = 1.6*10**-8 #linear drag coefficient
m = 1.04*10**-9 #mass of particle
dt = 10**-3 #time step
t_max = 10 #final time
t = 0 #initial time
Vy = 0 #initial velocity
t_list = [t]
Vy_list = [Vy]
dVy = -g*dt - (b/m)*Vy*dt
while t <= t_max:
t += dt
Vy += dVy
t_list.append(t)
Vy_list.append(Vy)
print(t, Vy)
plt.plot(t_list, Vy_list)
plt.show()
我不确定它生成的值是否正确,考虑到无论我将质量设置为多大,速度的变化都保持不变,而我预计它会对速度产生相当大的影响无穷小的质量。
我承认我正在复制针对完全不同的问题提供给我的解决方案,但我认为 while 循环是正确的方法吗?
您需要在 while 循环中更新 dVy:
while t <= t_max:
dVy = -g*dt - (b/m)*Vy*dt
t += dt
Vy += dVy
否则它将是一个常量,不会像您预期的那样随时间更新。