用python中的Euler方法调制对象的轨迹

时间:2015-10-03 22:22:05

标签: python python-3.x numpy numerical-methods

我尝试使用Euler方法调制对象的轨迹。当我输入45度时看起来我的程序工作,但是任何其他值它都不起作用(我不确定它是否适用于45度,但它至少看起来像轨迹)。也许有人可以看到我做错了什么,这是我的代码:

import numpy as np
import matplotlib.pyplot as plt

dt=0.005  # step
t=0
X=[0]
Y=[0]  # X and Y are arrays for storing coordinates
x=0
y=0
v=10  # initial velocity
F=100 # force given to object
m=10  # object's mass
r=1.5  # viscosity
alpha=float(input())
vx=v*np.cos(np.rad2deg(alpha))  # projections to axises
vy=v*np.sin(np.rad2deg(alpha))
Fx=F*np.cos(np.rad2deg(alpha))
Fy=F*np.sin(np.rad2deg(alpha))
while t<20:  # Euler method

    ax=(Fx-r*vx)/m  # F=ma, F=-rv so a=(F-rv)/m
    ay=(Fy-r*vy)/m
    vx=vx+ax*dt
    vy=vy+ay*dt
    x=x+vx*dt
    y=y+vy*dt
    X.append(x)
    Y.append(y)
    t=t+dt
    if y<0:
        break

plt.plot(X,Y)
plt.autoscale(enable=True,axis='both',tight=None)
plt.xlabel(X)
plt.ylabel(Y)
plt.show()

这是我输入45度时的结果:

Screenshot

1 个答案:

答案 0 :(得分:0)

现在似乎工作了,我忘了添加F = mg:

ax=(Fx-r*vx)/m
ay=(Fy-r*vy-m*g)/m  # g=9.8