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