import numpy as np
# constants
n=1000 # number of time steps to simulate
m=90 # number of angles
rho=1.225 # kg/m^3
g=-9.8 # m/s^2
start=0.0 # seconds
end=10 # seconds
initial_velocity=70 # meters/second
initial_height=5
# object
A=.8 # surface area m^2
C=1.4 # drag coefficient
mass=65 # mass of object in kg
# parameters of simulation
angles=np.array([i for i in range(1,m+1)])
radians=np.radians(angles)
#initalize state variables
t=np.linspace(start,end,n+1)
vx=np.zeros((m,n+1),dtype=np.float64)
vy=np.zeros((m,n+1),dtype=np.float64)
x=np.zeros((m,n+1),dtype=np.float64)
y=np.zeros((m,n+1),dtype=np.float64)
for i in range(m):
y[i][0]=initial_height
vx[i][0]=initial_velocity*np.cos(radians[i])
vy[i][0]=initial_velocity*np.sin(radians[i])
# begin simulation
for i in range(m):
for j in range(1,n+1):
if y[i,j-1]<=0:
vx[i,j]=0
vy[i,j]=0
y[i,j]=0
x[i,j]=x[i,j-1]
else:
# the following code is _corrected_ from the wrong math
v = np.sqrt(vx[ j-1 ]**2 + vy[ j-1 ]**2)
ax = -(0.5*rho*C*A/mass) * v**2 * (vx[ j-1 ]/v)
ay = g - (0.5*rho*C*A/mass) * v**2 * (vy[ j-1 ]/v)
dt=t[j]-t[j-1]
vx[i,j]=vx[i,j-1]+ax*dt
vy[i,j]=vy[i,j-1]+ay*dt
x[i,j]=x[i,j-1]+vx[i,j]*dt
y[i,j]=y[i,j-1]+vy[i,j]*dt
if y[i,j]<=0:
y[i,j]=0
x[i,j]=x[i,j-1]
vx[i,j]=0
vy[i,j]=0
best_distance=0
best_angle=0
for i in range(m):
if x[i,-1]>best_distance:
best_distance=x[i,-1]
best_angle=i+1
問題は、加速度と前回の速度をdtの間隔で計算しようとしています。すべての式がすべてvx [i、j]に関する数字なので、ここで何が問題なのですか?助けてください! vxとvyはすべてデータを格納する2次元配列なので、ドラッグを含む実際の速度を計算します。私は投影についてよりよくシミュレートするためにvを導入しました。あなたが追加し、乗算ときにエラー:シーケンスを使用して配列を設定する
array([-51.70596988, nan, nan, ..., nan,
nan, nan])
:ちょうど私はあなたが言及してエラーが出る時点で、あなたのエラーを見るためにあなたのコードを実行している
ここで問題は何ですか?あなたはどんな結果を得ますか? –
'angles = np.array([範囲(1、m + 1)])')は 'angles = np.arange(1、m + 1)'として表現するのが良いでしょう。同じ振る舞いのために '、dtype = np.int'をargsに追加する必要があります。なんらかの理由で 'np.array'を使う必要があるならば、少なくとも' list(range(1、m + 1)) 'だけで' [iは範囲(1、m + 1) 。 –