Python中的Projectile Motion:如何生成列表,给出垂直速度?

时间:2018-04-18 09:51:36

标签: python matplotlib while-loop projectile

我试图找出垂直随着阻力下降的球形粒子的垂直速度Vy如何随时间t而变化。我想生成一个值列表,列出从发布时间到某个t_max以及绘制Vy与时间之间的几个时间点的Vy。

我给出的解决ΔVy的等式是:

dVy = -g*dt - (b/m)*Vy*dt

我已经获得了一个建议的算法来查找值

“代码应该询问m,g,b和Δt的值。一旦定义了这些值,代码应该为每个时间t提供一系列Vy值。”

到目前为止,这是我的尝试:

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循环是要走的路?

1 个答案:

答案 0 :(得分:1)

您需要在while循环中更新dVy:

while t <= t_max:

    dVy = -g*dt - (b/m)*Vy*dt

    t += dt
    Vy += dVy

否则它将是一个常数,而不会像你期望的那样随时更新。