重写python scipy.integrate.odeint以模拟matlab ode15s

重写python scipy.integrate.odeint以模拟matlab ode15s,python,matlab,scipy,ode,odeint,Python,Matlab,Scipy,Ode,Odeint,我是python新手,希望在python中模拟使用matlab ode15s,而不是scipy中的内置odeint 代码最初是这样编写的: newRphi = odeint(PSP,Rphi,t,(b,k,F))[-1,:] ode15s = scipy.integrate.ode(f) ode15s.set_integrator('vode', method='bdf', order=15) ode15s.set_initial_value(y0, t0) 其中,PSP定义为: def P

我是python新手,希望在python中模拟使用matlab ode15s,而不是scipy中的内置odeint

代码最初是这样编写的:

newRphi = odeint(PSP,Rphi,t,(b,k,F))[-1,:]
ode15s = scipy.integrate.ode(f)
ode15s.set_integrator('vode', method='bdf', order=15)
ode15s.set_initial_value(y0, t0)
其中,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中ODE15的东西。通过阅读其他一些踏板,我发现我可以用

ode.set_integrator('vode', method='bdf', order=15)
现在的问题是,如何将原始参数传递给这个积分器

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

newRphi = odeint(PSP,Rphi,t,(b,k,F))[-1,:]
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的最终值
    任何帮助都将不胜感激。多谢各位

    请注意,
    ode15s
    中的
    15
    并不表示第15顺序
    ode15s
    是一种可变顺序算法,使用从1到5的顺序。