scipy.interpolate.

make_splrep#

scipy.interpolate.make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None)[Quelle]#

Erzeugt eine glättende B-Spline-Funktion mit begrenztem Fehler, die Sprünge in den Ableitungen minimiert.

Gegeben die Datenpunkte (x[i], y[i]), ermittelt eine glatte Spline-Approximation vom Grad k im Intervall xb <= x <= xe.

Parameter:
x, yarray_like, Form (m,)

Die Datenpunkte, die eine Kurve y = f(x) definieren.

warray_like, Form (m,), optional

Streng positive 1D-Array von Gewichten, die die gleiche Länge wie x und y haben. Die Gewichte werden zur Berechnung des gewichteten Spline-Fits mittels Kleinster Quadrate verwendet. Wenn die Fehler in den y-Werten Standardabweichungen haben, die durch den Vektor d gegeben sind, dann sollte w gleich 1/d sein. Standard ist np.ones(m).

xb, xefloat, optional

Das zu fittende Intervall. Wenn None, werden diese Standardwerte x[0] und x[-1] verwendet.

kint, optional

Der Grad des Spline-Fits. Es wird empfohlen, kubische Splines (k=3) zu verwenden, was der Standard ist. Gerade Werte von k sollten vermieden werden, insbesondere bei kleinen s-Werten.

sfloat, optional

Die Glättungsbedingung. Das Maß an Glätte wird durch die Erfüllung der LSQ-Bedingung (Kleinste Quadrate) bestimmt:

sum((w * (g(x)  - y))**2 ) <= s

wobei g(x) die geglättete Anpassung an (x, y) ist. Der Benutzer kann s verwenden, um den Kompromiss zwischen Nähe zu den Daten und Glätte des Fits zu steuern. Größere s-Werte bedeuten mehr Glättung, während kleinere s-Werte weniger Glättung anzeigen. Empfohlene s-Werte hängen von den Gewichten w ab. Wenn die Gewichte die Umkehrung der Standardabweichung von y darstellen, dann sollte ein guter s-Wert im Bereich (m-sqrt(2*m), m+sqrt(2*m)) liegen, wobei m die Anzahl der Datenpunkte in x, y und w ist. Standard ist s = 0.0, d. h. Interpolation.

tarray_like, optional

Die Spline-Knoten. Wenn None (Standard), werden die Knoten automatisch konstruiert. Es müssen mindestens 2*k + 2 und höchstens m + k + 1 Knoten vorhanden sein.

nestint, optional

Die Ziel-Länge des Knotenvektors. Sollte zwischen 2*(k + 1) (die minimale Anzahl von Knoten für einen Spline vom Grad k) und m + k + 1 (die Anzahl der Knoten des interpolierenden Splines) liegen. Die tatsächliche Anzahl der von dieser Routine zurückgegebenen Knoten kann etwas größer sein als nest. Standard ist None (keine Begrenzung, bis zu m + k + 1 Knoten hinzufügen).

Rückgabe:
spleine BSpline-Instanz

Für s=0 gilt spl(x) == y. Für Werte von s ungleich Null stellt spl die geglättete Annäherung an (x, y) dar, im Allgemeinen mit weniger Knoten.

Siehe auch

generate_knots

wird intern zur Erzeugung der Knoten verwendet

make_splprep

das Analogon dieser Routine für parametrische Kurven

make_interp_spline

konstruiert einen interpolierenden Spline (s = 0)

make_lsq_spline

konstruiert den Spline nach der Methode der kleinsten Quadrate unter Angabe des Knotenvektors

splrep

ein FITPACK-Analogon dieser Routine

Hinweise

Diese Routine konstruiert die glättende Spline-Funktion, \(g(x)\), um die Summe der Sprünge \(D_j\) der k-ten Ableitung an den internen Knoten (\(x_b < t_i < x_e\)) zu minimieren, wobei

\[D_i = g^{(k)}(t_i + 0) - g^{(k)}(t_i - 0)\]

Insbesondere konstruiert die Routine die Spline-Funktion \(g(x)\), die minimiert:

\[\sum_i | D_i |^2 \to \mathrm{min}\]

vorausgesetzt, dass

\[\sum_{j=1}^m (w_j \times (g(x_j) - y_j))^2 \leqslant s ,\]

wobei \(s > 0\) der Eingabeparameter ist.

Mit anderen Worten, wir balancieren die Maximierung der Glätte (gemessen an den Sprüngen der Ableitung, das erste Kriterium) und die Abweichung von \(g(x_j)\) von den Daten \(y_j\) (das zweite Kriterium).

Beachten Sie, dass die Summation im zweiten Kriterium über alle Datenpunkte erfolgt und im ersten Kriterium über die internen Spline-Knoten (d. h. diejenigen mit xb < t[i] < xe). Die Spline-Knoten sind im Allgemeinen eine Teilmenge der Daten, siehe generate_knots für Details.

Beachten Sie auch den Unterschied zu make_lsq_spline: Letztere Routine berücksichtigt keine Glätte und löst einfach ein Problem der kleinsten Quadrate

\[\sum w_j \times (g(x_j) - y_j)^2 \to \mathrm{min}\]

für eine Spline-Funktion \(g(x)\) mit einem _festen_ Knotenvektor t.

Hinzugefügt in Version 1.15.0.

Referenzen

[1]

P. Dierckx, “Algorithms for smoothing data with periodic and parametric splines, Computer Graphics and Image Processing”, 20 (1982) 171-184.

[2]

P. Dierckx, “Curve and surface fitting with splines”, Monographs on Numerical Analysis, Oxford University Press, 1993.