【发布时间】:2017-11-28 06:52:29
【问题描述】:
在下面的代码中,当我尝试运行“x01 = rk4(x01,t1[-1],h1,fallParabola)”行时,会弹出一个错误说“不能将序列乘以非整数输入‘浮动’。”我想知道为什么会这样,因为我认为将 numpy 数组中的每个项乘以一个数字就会将数组中的每个项乘以该数字。
**slope1 和 intercept1 已在别处定义,所以这不是问题
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% 的信息(完整的堆栈跟踪!)。
-
...请参阅minimal reproducible example 定义以获取有关构建最短代码的更多指导,这些代码可以用来自己查看问题(并测试预期答案)。这看起来应该可以在两行中重现,其中一个是
import,另一个是乘法运算。 -
旁注:看起来你正在乘以一个元组(fallParabola 的返回):
h*g(t,f)。但这只是猜测。 -
我猜遇到了
alist*afloat。您正在传递一个列表而不是数组。[1,2,3]*5有效,但不像是一个数组。