BDF#
- class scipy.integrate.BDF(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, jac=None, jac_sparsity=None, vectorized=False, first_step=None, **extraneous)[Quelle]#
Implizite Methode basierend auf Backward-Differentiation-Formeln.
Dies ist eine Methode mit variabler Ordnung, wobei die Ordnung automatisch von 1 bis 5 variiert. Der allgemeine Rahmen des BDF-Algorithmus ist in [1] beschrieben. Diese Klasse implementiert eine quasi-konstante Schrittweite, wie in [2] erklärt. Die Strategie zur Fehlerabschätzung für die BDF mit konstanter Schrittweite ist in [3] abgeleitet. Eine Genauigkeitsverbesserung durch modifizierte Formeln (NDF) [2] ist ebenfalls implementiert.
Kann im komplexen Bereich angewendet werden.
- 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.- 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 Löser 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 festzulegen, indem man array_like mit der Form (n,) für atol übergibt. Standardwerte sind 1e-3 für rtol und 1e-6 für atol.- jac{None, array_like, sparse_matrix, callable}, optional
Jacobi-Matrix der rechten Seite des Systems bezüglich y, erforderlich für diese Methode. Die Jacobi-Matrix hat die Form (n, n) und ihr Element (i, j) ist gleich
d f_i / d y_j. Es gibt drei Möglichkeiten, die Jacobi-Matrix zu definierenWenn array_like oder sparse_matrix, wird angenommen, dass die Jacobi-Matrix konstant ist.
Wenn callable, wird angenommen, dass die Jacobi-Matrix von sowohl t als auch y abhängt; sie wird bei Bedarf als
jac(t, y)aufgerufen. Für die Methoden 'Radau' und 'BDF' kann der Rückgabewert eine spärliche Matrix sein.Wenn None (Standard), wird die Jacobi-Matrix durch endliche Differenzen angenähert.
Es wird generell empfohlen, die Jacobi-Matrix bereitzustellen, anstatt sich auf eine Approximation durch endliche Differenzen zu verlassen.
- jac_sparsity{None, array_like, sparse matrix}, optional
Definiert die Sparsity-Struktur der Jacobi-Matrix für eine Finite-Differenzen-Approximation. Ihre Form muss (n, n) sein. Dieses Argument wird ignoriert, wenn jac nicht None ist. Wenn die Jacobi-Matrix nur wenige Nicht-Null-Elemente in *jeder* Zeile hat, beschleunigt die Angabe der Sparsity-Struktur die Berechnungen erheblich [4]. Ein Nulleintrag bedeutet, dass ein entsprechendes Element in der Jacobi-Matrix immer Null ist. Wenn None (Standard), wird angenommen, dass die Jacobi-Matrix dicht ist.
- vectorizedbool, optional
Ob fun vektorisiert aufgerufen werden kann. Standard ist False.
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).Das Setzen von
vectorized=Trueermöglicht eine schnellere Finite-Differenzen-Approximation der Jacobi-Matrix durch diese Methode, kann jedoch unter Umständen (z.B. kleinelen(y0)) zu einer insgesamt langsameren Ausführung führen.
- 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.
- step_sizefloat
Größe des letzten erfolgreichen Schritts. None, wenn noch keine Schritte gemacht wurden.
- nfevint
Anzahl der Auswertungen der rechten Seite.
- njevint
Anzahl der Auswertungen der Jacobi-Matrix.
- nluint
Anzahl der LU-Zerlegungen.
Methoden
Berechnet ein lokales Interpolationspolynom über den letzten erfolgreichen Schritt.
step()Führt einen Integrationsschritt durch.
Referenzen
[1]G. D. Byrne, A. C. Hindmarsh, „A Polyalgorithm for the Numerical Solution of Ordinary Differential Equations“, ACM Transactions on Mathematical Software, Vol. 1, No. 1, S. 71-96, März 1975.
[2] (1,2)L. F. Shampine, M. W. Reichelt, „THE MATLAB ODE SUITE“, SIAM J. SCI. COMPUTE., Vol. 18, No. 1, S. 1-22, Januar 1997.
[3]E. Hairer, G. Wanner, „Solving Ordinary Differential Equations I: Nonstiff Problems“, Abschn. III.2.
[4]A. Curtis, M. J. D. Powell und J. Reid, „On the estimation of sparse Jacobian matrices“, Journal of the Institute of Mathematics and its Applications, 13, S. 117-120, 1974.