6

ソルバーを呼び出すときに、ソルバー自体が実行するさまざまな統合ステップを保存したかったのです。

solver1.integrate(t_end)

そのため、while ループを実行し、値を に設定する step オプションを有効にしましたTrue

while solver1.successful() and solver1.t < t0+dt:
    solver1.integrate(t_end,step=True)
    time.append(solver1.t)

y次に、積分の結果であるをプロットすると、ここに問題が発生します。特定の領域に不安定性が表示されます :

y ソルバーのステップ オプションを有効にする

ループなどのせいだと思ったので、結果を確認して次を削除しましたstep

while solver1.successful() and solver1.t < t0+dt:
    solver1.integrate(t_end)

そして驚き...私は正しい結果を持っています:

y ソルバーのステップ オプションを無効にする

これは非常に奇妙な状況です...誰かがこの問題で私を助けてくれればありがたいです.

編集 :

私が行うソルバーを設定するには:

solver1 = ode(y_dot,jac).set_integrator('vode',with_jacobian=True)
solver1.set_initial_value(x0,t0)

そして、私は結果を保存します.append()

4

1 に答える 1

2

を設定step=Trueすると、間接的にvode._integrator.runner(Fortran サブルーチン) に を使用する命令が与えられます。itask=2デフォルトは ですitask=1。これについての詳細は、次の方法で取得できますrunner

r._integrator.runner?

itask=1SciPy 0.12.0 のドキュメントでは、別のoritask=2で何が起こっているかについての説明は見つかりませんが、ここで見つけることができます:

ITASK  = An index specifying the task to be performed.
!          Input only. ITASK has the following values and meanings.
!          1  means normal computation of output values of y(t) at
!             t = TOUT(by overshooting and interpolating).
!          2  means take one step only and return.
!          3  means stop at the first internal mesh point at or
!             beyond t = TOUT and return.
!          4  means normal computation of output values of y(t) at
!             t = TOUT but without overshooting t = TCRIT.
!             TCRIT must be input as RUSER(1). TCRIT may be equal to
!             or beyond TOUT, but not behind it in the direction of
!             integration. This option is useful if the problem
!             has a singularity at or beyond t = TCRIT.
!          5  means take one step, without passing TCRIT, and return.
!             TCRIT must be input as RUSER(1).
于 2013-05-17T16:01:04.647 に答える