scipy.integrate.

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 y zur Zeit t. Die Aufrufsignatur ist fun(t, y), wobei t ein Skalar ist und y ein ndarray mit len(y) = len(y0) ist. fun muss ein Array derselben Form wie y zurü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 von rtol * abs(y) erwartet werden kann, sodass rtol den zulässigen Fehler dominiert. Wenn atol größer als rtol * abs(y) ist, ist die Anzahl der korrekten Ziffern nicht garantiert. Umgekehrt, um die gewünschte atol zu erreichen, setzen Sie rtol so, dass rtol * 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 gleich d f_i / d y_j. Die Funktion wird als jac(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 muss n Spalten und uband + lband + 1 Zeilen haben, in denen die Jacobi-Diagonalen geschrieben sind. Speziell gilt jac_packed[uband + i - j , j] = jac[i, j]. Das gleiche Format wird in scipy.linalg.solve_banded verwendet (siehe Illustration). Diese Parameter können auch mit jac=None verwendet 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 vectorized False ist, wird fun immer mit y der Form (n,) aufgerufen, wobei n = len(y0) ist.

Wenn vectorized True ist, kann fun mit y der Form (n, k) aufgerufen werden, wobei k eine Ganzzahl ist. In diesem Fall muss fun so funktionieren, dass fun(t, y)[:, i] == fun(t, y[:, i]) (d. h. jede Spalte des zurückgegebenen Arrays ist die Zeitableitung des Zustands, der einer Spalte von y entspricht).

Wenn vectorized=True gesetzt 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

dense_output()

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.