子弹的轨迹,当有阻力时

时间:2015-04-09 13:19:30

标签: graph ode

当有拖曳力时,我试图表达子弹的轨迹。 但是,我无法准确地表达图表。 如何用ode方程描绘轨迹?

这是我的图表。这个图表似乎不合理。虽然我努力设置vydot值的不同标志,但这不能正常工作。

my graph

from pylab import*
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import numpy as np


g=10
m=1
k=0.01
y=zeros([2])
vy0=0
vydot=200
vx0=0
vxdot=200
y[0]=vy0
y[1]=vydot
x=zeros([2])
x[0]=vx0
x[1]=vxdot

t=linspace(0,1000,5000)

def fy(y,t):
    g0=y[1]
    g1=-k*y[1]
    return array([g0,g1])
def fx(z,t):
    g0=-x[1]
    g1=-k*(x[1])-g
    return array([g0,g1])

ans1=odeint(fy,y,t)
ans2=odeint(fx,x,t)
ydata=(ans1[:,])
xdata=(ans2[:,])
plt.plot(ydata,xdata)
show()"""

1 个答案:

答案 0 :(得分:0)

在空气中,与液体相反,子弹不仅沿着其路径移动体积,而且还增加了与速度成比例的被置换的空气分子的脉冲。因此阻力是

vn=sqrt(vx²+vy²)
dragx = -k*vn*vx
dragy = -k*vn*vy

因此使用

def f(z,t):
    x,y,vx,vy = z
    vn = sqrt(vx*vx+vy*vy)
    return array([vx, vy, -k*vn*vx, -k*vn*vy-g ])

对于第一个概述,请考虑没有拖动的问题。然后解决方案是

x(t) = vx*t        = 200m/s*t
y(t) = vy*t-g/2*t² = 200m/s*t - 5m/s²*t²
在x坐标y(t)=0t=2*vy/g再次遇到

2*vx*vy/g = 8000m。高度为t=vy/g的{​​{1}}达到最大高度。