私はPythonが初めてで、scipyの組み込みodeintの代わりにPythonでmatlab ode15sを使用して模倣したいと考えています。
コードはもともと次のように書かれています。
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, ここに私の質問があります:
- t0 の初期値は何ですか? t[0] だけですか?
- 変数 (b,k,f) を関数 f=PSP に渡すにはどうすればよいですか?
- これを ode15s と呼ぶ場合、t のベクトル サイズを積分して yy の最終値を収集するにはどうすればよいですか?
どんな助けでも大歓迎です。ありがとうございました。