Kann jemand ein Beispiel für die Bereitstellung eines Jacobibian an eine integrate.odeint
-Funktion in SciPy?
Ich versuche, diesen Code von SciPy Tutorial Odein Beispiel
Unter der Haube scipy.integrate.odeint
verwendet den LSODA-Löser aus der ODEPACK FORTRAN-Bibliothek . Um mit Situationen fertig zu werden, in denen die zu integrierende Funktion steif ist, wechselt LSODA adaptiv zwischen zwei verschiedene Methoden zur Berechnung der integralen - Adams-Methode , die schneller ist, aber für steife Systeme ungeeignet ist, und BDF , das ist langsamer, aber robust gegen Steifheit.
Die spezielle Funktion, die Sie integrieren möchten, ist nicht steif, daher wird LSODA Adams bei jeder Iteration verwenden. Sie können dies überprüfen, indem Sie infodict
( ...,full_output=True
) und infodict['mused']
zurückgeben.
Da Adams 'Methode die Jacobi-Methode nicht verwendet, wird Ihre Gradientenfunktion nie aufgerufen. Wenn Sie jedoch odeint
eine steife Integrationsfunktion zuweisen, wie zum Beispiel die Van der Pol-Gleichung :
Sie sollten sehen, dass odeint
auf BDF umschaltet und die Jacobi-Funktion jetzt aufgerufen wird.
Wenn Sie mehr Kontrolle über den Solver haben möchten, sollten Sie sich % co_de ansehen % , das ist eine viel flexiblere objektorientierte Schnittstelle zu mehreren verschiedenen Integratoren.