我是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的最终值?
任何帮助将不胜感激 . 谢谢 .