scipy.interpolate.

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.

get_coeffs()

Gib die Spline-Koeffizienten zurück.

get_knots()

Gib die Positionen der inneren Knoten des Splines zurück.

get_residual()

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.

set_smoothing_factor(s)

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

UnivariateSpline

Ein geglätteter univariater Spline zur Anpassung an eine gegebene Menge von Datenpunkten.

InterpolatedUnivariateSpline

eine interpolierende univariate Spline für einen gegebenen Satz von Datenpunkten.

splrep

Eine Funktion zum Finden der B-Spline-Darstellung einer 1-D-Kurve

splev

Eine Funktion zur Auswertung eines B-Splines oder seiner Ableitungen

sproot

Eine Funktion zum Finden der Nullstellen eines kubischen B-Splines

splint

Eine Funktion zur Auswertung des bestimmten Integrals eines B-Splines zwischen zwei gegebenen Punkten

spalde

Eine 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 dass t[j] < x[j] < t[j+k+1] für j=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()
../../_images/scipy-interpolate-LSQUnivariateSpline-1_00_00.png

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.])