LSODA#
- class scipy.integrate.LSODA(fun, t0, y0, t_bound, first_step=None, min_step=0.0, max_step=inf, rtol=0.001, atol=1e-06, jac=None, lband=None, uband=None, vectorized=False, **extraneous)[Quelle]#
Adams/BDF-Methode mit automatischer Steifigkeitserkennung und Umschaltung.
Dies ist ein Wrapper für den Fortran-Solver von ODEPACK [1]. Er schaltet automatisch zwischen der nichtsteifen Adams-Methode und der steifen BDF-Methode um. Die Methode wurde ursprünglich detailliert in [2].
- Parameter:
- funcallable
Rechte Seite des Systems: die Zeitableitung des Zustands
yzur Zeitt. Die Aufrufsignatur istfun(t, y), wobeitein Skalar ist undyein ndarray mitlen(y) = len(y0)ist.funmuss ein Array derselben Form wieyzurückgeben. Siehe vectorized für weitere Informationen.- t0float
Anfangszeit.
- y0array_like, shape (n,)
Anfangszustand.
- t_boundfloat
Grenzzeit - die Integration wird nicht darüber hinaus fortgesetzt. Sie bestimmt auch die Richtung der Integration.
- first_stepfloat or None, optional
Anfängliche Schrittgröße. Standard ist
None, was bedeutet, dass der Algorithmus wählen soll.- min_stepfloat, optional
Mindestschrittweite. Standardwert ist 0.0, d.h. die Schrittweite ist unbeschränkt und wird ausschließlich vom Solver bestimmt.
- max_stepfloat, optional
Maximale zulässige Schrittgröße. Standard ist np.inf, d.h. die Schrittgröße ist nicht begrenzt und wird ausschließlich vom Solver bestimmt.
- rtol, atolfloat and array_like, optional
Relative und absolute Toleranzen. Der Solver hält die lokalen Fehlerschätzungen kleiner als
atol + rtol * abs(y). Hier steuert rtol die relative Genauigkeit (Anzahl korrekter Ziffern), während atol die absolute Genauigkeit (Anzahl korrekter Dezimalstellen) steuert. Um die gewünschte rtol zu erreichen, setzen Sie atol kleiner als den kleinsten Wert, der vonrtol * abs(y)erwartet werden kann, sodass rtol den zulässigen Fehler dominiert. Wenn atol größer alsrtol * abs(y)ist, ist die Anzahl der korrekten Ziffern nicht garantiert. Umgekehrt, um die gewünschte atol zu erreichen, setzen Sie rtol so, dassrtol * abs(y)immer kleiner als atol ist. Wenn Komponenten von y unterschiedliche Skalen haben, kann es vorteilhaft sein, unterschiedliche atol-Werte für verschiedene Komponenten durch Übergabe von `array_like` mit der Form (n,) für atol festzulegen. Standardwerte sind 1e-3 für rtol und 1e-6 für atol.- jacNone oder aufrufbar, optional
Jacobi-Matrix der rechten Seite des Systems bezüglich
y. Die Jacobi-Matrix hat die Form (n, n) und ihr Element (i, j) ist gleichd f_i / d y_j. Die Funktion wird alsjac(t, y)aufgerufen. Wenn None (Standard), wird die Jacobi-Matrix durch endliche Differenzen angenähert. Es wird generell empfohlen, die Jacobi-Matrix bereitzustellen, anstatt sich auf eine Annäherung durch endliche Differenzen zu verlassen.- lband, ubandint oder None
Parameter, die die Bandbreite der Jacobi-Matrix definieren, d.h.
jac[i, j] != 0 nur für i - lband <= j <= i + uband. Wenn diese gesetzt werden, muss Ihre `jac`-Routine die Jacobi-Matrix im gepackten Format zurückgeben: das zurückgegebene Array mussnSpalten unduband + lband + 1Zeilen haben, in denen die Jacobi-Diagonalen geschrieben sind. Speziell giltjac_packed[uband + i - j , j] = jac[i, j]. Das gleiche Format wird inscipy.linalg.solve_bandedverwendet (siehe Illustration). Diese Parameter können auch mitjac=Noneverwendet werden, um die Anzahl der durch endliche Differenzen geschätzten Jacobi-Elemente zu reduzieren.- vectorizedbool, optional
Ob fun in vektorisierter Weise aufgerufen werden darf. False (Standard) wird für diesen Solver empfohlen.
Wenn
vectorizedFalse ist, wird fun immer mityder Form(n,)aufgerufen, wobein = len(y0)ist.Wenn
vectorizedTrue ist, kann fun mityder Form(n, k)aufgerufen werden, wobeikeine Ganzzahl ist. In diesem Fall muss fun so funktionieren, dassfun(t, y)[:, i] == fun(t, y[:, i])(d. h. jede Spalte des zurückgegebenen Arrays ist die Zeitableitung des Zustands, der einer Spalte vonyentspricht).Wenn
vectorized=Truegesetzt wird, ist eine schnellere Annäherung der Jacobi-Matrix durch endliche Differenzen für die Methoden ‘Radau’ und ‘BDF’ möglich, führt aber zu einer langsameren Ausführung für diesen Solver.
- Attribute:
- nint
Anzahl der Gleichungen.
- statusstring
Aktueller Status des Solvers: 'running', 'finished' oder 'failed'.
- t_boundfloat
Grenzzeit.
- directionfloat
Integrationsrichtung: +1 oder -1.
- tfloat
Aktuelle Zeit.
- yndarray
Aktueller Zustand.
- t_oldfloat
Vorherige Zeit. None, wenn noch keine Schritte gemacht wurden.
- nfevint
Anzahl der Auswertungen der rechten Seite.
- njevint
Anzahl der Auswertungen der Jacobi-Matrix.
Methoden
Berechnet ein lokales Interpolationspolynom über den letzten erfolgreichen Schritt.
step()Führt einen Integrationsschritt durch.
Referenzen
[1]A. C. Hindmarsh, „ODEPACK, A Systematized Collection of ODE Solvers,“ IMACS Transactions on Scientific Computation, Vol 1., pp. 55-64, 1983.
[2]L. Petzold, „Automatic selection of methods for solving stiff and nonstiff systems of ordinary differential equations“, SIAM Journal on Scientific and Statistical Computing, Vol. 4, No. 1, pp. 136-148, 1983.