LSQUnivariateSpline#
- class scipy.interpolate.LSQUnivariateSpline(x, y, t, w=None, bbox=[None, None], k=3, ext=0, check_finite=False)[Quelle]#
1-D-Spline mit expliziten inneren Knoten.
Veraltet
Diese Klasse wird als veraltet betrachtet und erhält keine weiteren Updates mehr. Obwohl wir derzeit keine Pläne haben, sie zu entfernen, empfehlen wir, für neuen Code modernere Alternativen zu verwenden. Insbesondere empfehlen wir stattdessen die Verwendung von
make_lsq_spline.Passt eine Spline y = spl(x) vom Grad k an die bereitgestellten x, y Daten an. t gibt die inneren Knoten der Spline an
- Parameter:
- x(N,) array_like
Eingabedimension der Datenpunkte – muss steigend sein
- y(N,) array_like
Eingabedimension der Datenpunkte
- t(M,) array_like
innere Knoten der Spline. Müssen in aufsteigender Reihenfolge sein und
bbox[0] < t[0] < ... < t[-1] < bbox[-1]
- w(N,) array_like, optional
Gewichte für die Spline-Anpassung. Müssen positiv sein. Wenn None (Standard), sind die Gewichte alle 1.
- bbox(2,) array_like, optional
2er-Sequenz, die die Grenzen des Approximationsintervalls angibt. Wenn None (Standard), ist
bbox = [x[0], x[-1]].- kint, optional
Grad der Glättungs-Spline. Muss 1 <= k <= 5 sein. Standard ist k = 3, eine kubische Spline.
- extint oder str, optional
Steuert den Extrapolationsmodus für Elemente, die nicht im Intervall der Knotensequenz liegen.
wenn ext=0 oder „extrapolate“, gib den extrapolierten Wert zurück.
wenn ext=1 oder „zeros“, gib 0 zurück.
wenn ext=2 oder „raise“, löse einen ValueError aus.
Wenn ext=3 von 'const', wird der Randwert zurückgegeben.
Der Standardwert ist 0.
- check_finitebool, optional
Ob geprüft werden soll, ob die Eingabearrays nur endliche Zahlen enthalten. Deaktivierung kann die Leistung verbessern, kann aber zu Problemen (Abstürze, Nicht-Terminierung oder unsinnige Ergebnisse) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten. Standard ist False.
Methoden
__call__(x[, nu, ext])Bewerte den Spline (oder seine nu-te Ableitung) an den Positionen x.
antiderivative([n])Konstruiere einen neuen Spline, der die Stammfunktion dieses Splines darstellt.
derivative([n])Konstruiere einen neuen Spline, der die Ableitung dieses Splines darstellt.
derivatives(x)Gib alle Ableitungen des Splines an der Stelle x zurück.
Gib die Spline-Koeffizienten zurück.
Gib die Positionen der inneren Knoten des Splines zurück.
Gib die gewichtete Summe der quadrierten Residuen der Spline-Approximation zurück.
integral(a, b)Gib das bestimmte Integral des Splines zwischen zwei gegebenen Punkten zurück.
roots()Gib die Nullstellen des Splines zurück.
Fahre die Spline-Berechnung mit dem gegebenen Glättungsfaktor s und den bei der letzten Aufruf gefundenen Knoten fort.
validate_input
- Löst aus:
- ValueError
Wenn die inneren Knoten die Schoenberg-Whitney-Bedingungen nicht erfüllen
Siehe auch
UnivariateSplineEin geglätteter univariater Spline zur Anpassung an eine gegebene Menge von Datenpunkten.
InterpolatedUnivariateSplineeine interpolierende univariate Spline für einen gegebenen Satz von Datenpunkten.
splrepEine Funktion zum Finden der B-Spline-Darstellung einer 1-D-Kurve
splevEine Funktion zur Auswertung eines B-Splines oder seiner Ableitungen
sprootEine Funktion zum Finden der Nullstellen eines kubischen B-Splines
splintEine Funktion zur Auswertung des bestimmten Integrals eines B-Splines zwischen zwei gegebenen Punkten
spaldeEine Funktion zur Auswertung aller Ableitungen eines B-Splines
Hinweise
Die Anzahl der Datenpunkte muss größer sein als der Spline-Grad k.
Knoten t müssen die Schoenberg-Whitney-Bedingungen erfüllen, d. h. es muss eine Teilmenge von Datenpunkten
x[j]geben, so dasst[j] < x[j] < t[j+k+1]fürj=0, 1,...,n-k-2.Beispiele
>>> import numpy as np >>> from scipy.interpolate import LSQUnivariateSpline, UnivariateSpline >>> import matplotlib.pyplot as plt >>> rng = np.random.default_rng() >>> x = np.linspace(-3, 3, 50) >>> y = np.exp(-x**2) + 0.1 * rng.standard_normal(50)
Eine Glättungs-Spline mit vordefinierten inneren Knoten anpassen
>>> t = [-1, 0, 1] >>> spl = LSQUnivariateSpline(x, y, t)
>>> xs = np.linspace(-3, 3, 1000) >>> plt.plot(x, y, 'ro', ms=5) >>> plt.plot(xs, spl(xs), 'g-', lw=3) >>> plt.show()
Knotenvektor prüfen
>>> spl.get_knots() array([-3., -1., 0., 1., 3.])
Konstruktion einer LSQ-Spline unter Verwendung der Knoten einer anderen Spline
>>> x = np.arange(10) >>> s = UnivariateSpline(x, x, s=0) >>> s.get_knots() array([ 0., 2., 3., 4., 5., 6., 7., 9.]) >>> knt = s.get_knots() >>> s1 = LSQUnivariateSpline(x, x, knt[1:-1]) # Chop 1st and last knot >>> s1.get_knots() array([ 0., 2., 3., 4., 5., 6., 7., 9.])