我试图使用scipy
函数odeint
使用代码
tmax,dt=5000,1.68
t=linspace(0,tmax,num=round(tmax/dt)+1)
def d_displ(x,t,a,b,c,d,e):
#x'=y, y'=a*x+(b/(x**2.0+c))*x+d*y+e
y=x[0]
dy=x[1]
dx=[dy,a*x+(b/(x**2.0+c))*x+d*y+e]
return dx
def displ(d_displ,J_merger,a,b,c,d,e):
y0=[0.0,a]
sol=odeint(d_displ,y0,t,args=(a,b,c,d,e))
return sol
print displ(d_displ,J_merger,1.0,2.0,3.0,4.0,5.0)
但我错了
TypeError: float() argument must be a string or a number
为什么?我想要的是x的一个值数组
首先,我在这里没有使用
J_merger
,但无论如何:不明智地选择变量命名会给自己设置一个陷阱。在
d_displ
x
中是一个数组,而不是您的值x(t)
。因此,第一个返回值的形式是[float, array]
,而不是[float,float]
。因此,在第二次迭代中,odeint
失败。你知道吗应该是这样的
而且它是有效的……(好吧,当方程爆炸时,不到5000,但那是另一回事)
相关问题 更多 >
编程相关推荐