次のコードで、 "x01 = rk4(x01、t1 [-1]、h1、fallParabola)行を実行しようとすると、 "float型の非int型配列を掛けることはできません"というエラーが表示されます。私は、これがなぜであるのだろうと思っています。なぜなら、すべての単語を配列の中のすべての項にその数だけ掛け合わせるということです。エラー "'float型のnon-intでシーケンスを掛けることはできません"
** slope1、それはあなたがあなたのルンゲクッタ定義でnumpyの配列タプルによってh
を乗算し、していない問題
def rk4(f,t,h,g):
k1 = h*g(t,f)
k2 = h*g(t+0.5*h, f+0.5*k1)
k3 = h*g(t+0.5*h, f+0.5*k2)
k4 = h*g(t+h, f+k3)
return f + k1/6. + k2/3. + k3/3. + k4/6.
def fallParabola(t,f):
g = 10
px = f[0]
py = f[1]
vx = f[2]
vy = f[3]
slope = slope1 * (px-shift1)
theta = sp.arctan(np.abs(slope))
acc = np.array([vx,vy,g*sp.sin(theta)*sp.cos(theta),
g*sp.sin(theta)*sp.sin(theta)])
return acc,slope
x01 = np.array([0.0,intercept1,0.0,0.0])
t01 = 0.
px1 = [x01[0],]
py1 = [x01[1],]
vx1 = [x01[2],]
vy1 = [x01[3],]
t1 = [t01,]
h1 = 0.1
while py1[-1] > 0:
x01 = rk4(x01,t1[-1],h1,fallParabola)
px1.append(x01[0])
py1.append(x01[1])
vx1.append(x01[2])
vy1.append(x01[3])
t1.append(t1[-1]+h1)
実行可能なコードにコードを変更してください。提示されているとおり、これは行いません。さらに、おそらくエラーメッセージの情報の少なくとも50%を捨てているでしょう(完全なスタックトレース!)。 – sascha
... [mcve]の定義を参照してください。誰かが問題を自分自身で見るために使うことができる最短のコードを構築するためのガイダンスがあります。これは、2行で再現可能でなければならないもののように見えます。その1つは 'import'、もう1つは乗算演算です。 –
サイドノート:タプル(fallParabolaの復帰)に '' 'h * g(t、f)' ''を掛けているようです。しかし、それはちょうど推測です。 – sascha