为拖放对象编写Euler积分器

2024-04-19 08:42:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个Euler积分器来计算下落物体在空气阻力作用下的时间、速度、位置和加速度。我似乎无法构建一个工作循环来更新值并将它们正确地附加到数据数组中。对于初学者提出的问题,我深表歉意,但我们将不胜感激

m和g已经定义好了

import numpy as np
# create new arrays
Adat = [0]  #acceleration
Vdat = [0]  #velocity
Zdat = [0]  #height


V0 = 0
Vdat[0] = V0        #set initial conditions

Z0 = 30000
Zdat[0] = Z0

T = 0

t_step = 0.9  #set time step in seconds

b = 0.5  #drag coefficient in kg/s

while Zdat[-1] >= 0:
    A1 = (-m*g-b*np.abs(V0)*V0)/m
    V1 = V0+A1*t_step
    Z1 = Z0+V1*t_step
    T = T + t_step
    Adat.append(A1)
    Vdat.append(V1)
    Zdat.append(Z1)
    V0 = V1
    Z0 = Z1

Tags: ina1stepnp积分器v1eulerset
1条回答
网友
1楼 · 发布于 2024-04-19 08:42:03

欢迎来到堆栈溢出。 您确实可以使用列表来存储加速度、速度和位置:

import matplotlib.pyplot as plt

g=9.8
coeff=0.0001
tstep=0.9

acc=0
vel=0
pos=30000

acceleration=[acc]
velocity=[vel]
position=[pos]

while pos>=0:

    acc=g-coeff*(vel**2)
    acceleration.append(acc)   

    pos=pos-vel*tstep
    position.append(pos)   

    vel=vel+acc*tstep  
    velocity.append(vel)

plt.plot(velocity)
plt.xlabel('time [s]')
plt.ylabel('velocity [m/s]')   

在上面的代码示例中,我将速度的平方乘以任意系数,因为我不知道质量m要使用什么值

几句话:

  • 在我看来,在加速度的表达式中,没有必要取速度的绝对值。速度应该大于或等于零,因此你应该有V=abs(V)
  • 这里不需要定义和更新时间T,因为您以后不会在代码中使用它

希望这有帮助

相关问题 更多 >