我是python的新手,想模仿python中的matlab ode15s而不是scipy的内置odeint .

代码最初是这样编写的:

newRphi = odeint(PSP,Rphi,t,(b,k,F))[-1,:]

其中PSP定义为:

def PSP(xx,t,b,k,F):
R = xx[0]
phi = xx[1]
Rdot = sum([b[i]*R**(i+1) for i in xrange(len(b))]) + F(t) #indexing from zero
phiDot = 2*pi * k[2]*((R/k[1])**k[0])
yy = hstack((Rdot,phiDot))
return(yy)

通过阅读scipy.integrate.odeint()上的指令,该函数采用以下格式的参数:

scipy.integrate.odeint(func, y0, t, args=())

这意味着 func=PSP, y0=Rphi, t=t, args=(b,k,f) 所以Rphi进入PSP功能,并且集成并变成yy并且出来,并且这个函数对t的每个元素重复执行 .

现在我想将它翻译成可以模仿matlab中的ode15s的东西 . 从阅读其他一些步骤,我发现我可以使用

ode.set_integrator('vode', method='bdf', order=15)

现在问题变成了,我如何将原始参数传递给这个积分器?

我想它可能看起来像这样:

ode15s = scipy.integrate.ode(f)
ode15s.set_integrator('vode', method='bdf', order=15)
ode15s.set_initial_value(y0, t0)

我知道f是我的PSP功能,y0仍然是相同的:Rphi,这是我的问题:

  • t0的初始值是多少,它只是t [0]?

  • 如何将变量(b,k,f)传递给函数f = PSP?

  • 当我称之为ode15s时,如何通过t的向量大小进行积分并收集yy的最终值?

任何帮助将不胜感激 . 谢谢 .