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

否则它将是一个常量,不会像您预期的那样随时间更新。