2013-03-20 3 views
6

ich die verschiedenen Integrationsschritte vom Solver für sich genommen speichern wollte, als ich es nennen:Python - Scipy: ode-Modul: Ausgabe ermöglicht den Schritt Wahl des Solver

solver1.integrate(t_end) 

Also habe ich eine While-Schleife und dessen Wert auf True aktiviert den Schritt Einstellmöglichkeit:

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

Dann plotten ich y, das Ergebnis der Integration und hier kommt mein Problem. Ich habe Instabilitäten, die in einem sich Bereich angezeigt:

y enabling the step option of the solver

Ich dachte, es wegen der Schleife oder so etwas wie das so war ich das Ergebnis überprüft die step Entfernung:

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

und Überraschung. .. ich habe das richtige Ergebnis:

y disabling the step option of the solver

Es ist ein beenden Eine seltsame Situation ... Ich wäre dankbar, wenn jemand von euch mir bei diesem Problem helfen könnte.

EDIT:

die Solver einzustellen ich tun:

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

Und ich speichere das Ergebnis mit .append()

+0

Can Sie zeigen mehr von Ihrem Code, wie Sie den Solver einrichten und das Ergebnis für das Plotten speichern? – silvado

+0

Natürlich habe ich gerade meine Frage bearbeitet. – kuider

+0

Sie haben immer noch nicht gezeigt, wie Sie den aktuellen ODE-Zustand, den Sie zeichnen, speichern, vorausgesetzt, die Diagramme zeigen eine der ODE-Statusvariablen. – Nikolas

Antwort

2

Wenn Sie step=True setzen Sie indirekt geben das vode._integrator.runner (ein Fortran-Unterprogramm) eine Anweisung zur Verwendung itask=2, und der Standardwert ist itask=1. Sie können weitere Details zu diesem runner Tuns erhalten:

r._integrator.runner? 

In SciPy 0.12.0 Dokumentation werden Sie nicht eine Erklärung über das finden, was für die verschiedenen itask=1 vor sich geht oder itask=2, but you can find it here:

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).