Graph 当存在阻力时,子弹的轨迹

Graph 当存在阻力时,子弹的轨迹,graph,ode,Graph,Ode,我试着表达有阻力时子弹的轨迹。 然而,我不能精确地表达这个图表。 如何从ode方程描述轨迹 这是我的图表。这个图表不可信。虽然我很难设置vydot值的不同符号,但这并不能正常工作 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 vx

我试着表达有阻力时子弹的轨迹。 然而,我不能精确地表达这个图表。 如何从ode方程描述轨迹

这是我的图表。这个图表不可信。虽然我很难设置vydot值的不同符号,但这并不能正常工作

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()"""

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

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坐标2*vx*vy/g=8000m处,t=2*vy/g再次满足yt=0。t=vy/g在高度vy²/2g=2000m时达到最大高度。

我无法做到这一点,这并不是对您所遇到问题的描述。如果你把你得到的结果和你认为应该得到的结果放在一起,你就更有可能得到帮助。将详细信息放在一起的一个附带好处是,您可以通过这种方式自行解决问题。阻力耦合x和y分量,所以它们必须同时集成。