2

我是 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) So 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,这是我的问题:

  1. t0 的初始值是多少,是否只是 t[0]?
  2. 如何将变量 (b,k,f) 传递给函数 f=PSP?
  3. 当我调用这个 ode15s 时,如何通过 t 的向量大小进行积分并收集 yy 的最终值?

任何帮助将不胜感激。谢谢你。

4

0 回答 0