6

私は現在、SciPy の integrate.ode パッケージを使用して、結合された一次 ODE のペアを解こうとしています。ただし、これは、統合ループ中に、反復ごとにメソッドに送信しているパラメーターを更新する必要があることを意味し、単純に前の値を追跡しset_f_params()て反復ごとに呼び出すだけではうまくいかないようです。

hprev = Ho
pprev = Po
yh = np.zeros(0)
yp = np.zeros(0)
while dh.successful() and dp.successful() and dp.t < endtime and dh.t < endtime:
    hparams = [alpha, beta, pprev]
    pparams = [delta, gamma, hprev]
    dh.set_f_params(hparams)
    dp.set_f_params(pparams)
    dh.integrate(dh.t + stepsize)
    dp.integrate(dp.t + stepsize)
    yh = np.append(yh, dh.y)
    yp = np.append(yp, dp.y)
    hprev = dh.y
    pprev = dp.y

各反復で設定している値はset_f_params、コールバック メソッドに反映されていないようです。これは、ウェブ上の例のどれもコールバックに「ライブ」変数を渡すことを含まないように見えることを考えると、それほど驚くことではありませんでしたが、これはこれらの値をコールバック メソッドに取得する唯一の方法でした。

これらの ODE を数値的に統合するために SciPy を使用する方法について誰かアドバイスはありますか?

4

2 に答える 2

7

私は間違っているかもしれませんが、この例はあなたの問題に非常に近いようです。:) odeintODE 系を解くために使用します。

于 2011-04-20T03:25:29.360 に答える
4

同様の問題がありました。結局のところ、積分器は、integrate() の呼び出しごとに微分方程式関数を再評価するのではなく、独自の内部時間で再評価します。インテグレータの max_step オプションを stepsize と同じになるように変更したところ、うまくいきました。

于 2012-07-18T09:14:19.027 に答える