scipy.interpolate.

splrep#

scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0, per=0, quiet=1)[Quelle]#

Finden Sie die B-Spline-Darstellung einer 1-D-Kurve.

Veraltet

Diese Funktion gilt als veraltet und wird keine Updates mehr erhalten. Obwohl wir derzeit keine Pläne haben, sie zu entfernen, empfehlen wir, in neuem Code modernere Alternativen zu verwenden. Insbesondere empfehlen wir die Verwendung von make_splrep.

Bestimmen Sie aus den Datenpunkten (x[i], y[i]) eine glatte Spline-Approximation vom Grad k im Intervall xb <= x <= xe.

Parameter:
x, yarray_like

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

warray_like, optional

Streng positive Rang-1-Array von Gewichten, das die gleiche Länge wie x und y hat. Die Gewichte werden bei der Berechnung der gewichteten Spline-Anpassung nach kleinsten Quadraten verwendet. Wenn die Fehler in den y-Werten die Standardabweichung gegeben durch den Vektor d haben, dann sollte w 1/d sein. Standard ist ones(len(x)).

xb, xefloat, optional

Das Intervall für die Anpassung. Wenn None, sind dies standardmäßig x[0] und x[-1].

kint, optional

Der Grad der Spline-Anpassung. Es wird empfohlen, kubische Splines zu verwenden. Gerade Werte von k sollten besonders bei kleinen s-Werten vermieden werden. 1 <= k <= 5.

task{1, 0, -1}, optional

Wenn task==0, finden Sie t und c für einen gegebenen Glättungsfaktor s.

Wenn task==1, finden Sie t und c für einen anderen Wert des Glättungsfaktors s. Es muss ein vorheriger Aufruf mit task=0 oder task=1 für denselben Datensatz erfolgt sein (t wird intern gespeichert und verwendet)

Wenn task=-1, finden Sie die gewichtete Spline-Anpassung nach kleinsten Quadraten für einen gegebenen Satz von Knoten, t. Dies sollten innere Knoten sein, da Knoten an den Enden automatisch hinzugefügt werden.

sfloat, optional

Eine Glättungsbedingung. Das Ausmaß der Glättung wird durch die Erfüllung der Bedingungen bestimmt: sum((w * (y - g))**2,axis=0) <= s, wobei g(x) die geglättete Interpolation von (x,y) ist. Der Benutzer kann s verwenden, um den Kompromiss zwischen Nähe und Glätte der Anpassung zu steuern. Größeres s bedeutet mehr Glättung, während kleinere Werte von s weniger Glättung anzeigen. Empfohlene Werte von s hängen von den Gewichten w ab. Wenn die Gewichte die Inverse der Standardabweichung von y darstellen, dann sollte ein gutes s im Bereich (m-sqrt(2*m),m+sqrt(2*m)) liegen, wobei m die Anzahl der Datenpunkte in x, y und w ist. Standard: s=m-sqrt(2*m), wenn Gewichte bereitgestellt werden. s = 0.0 (interpolierend), wenn keine Gewichte bereitgestellt werden.

tarray_like, optional

Die benötigten Knoten für task=-1. Wenn angegeben, wird task automatisch auf -1 gesetzt.

full_outputbool, optional

Wenn ungleich Null, werden optionale Ausgaben zurückgegeben.

perbool, optional

Wenn ungleich Null, werden die Datenpunkte als periodisch mit der Periode x[m-1] - x[0] betrachtet und eine glatte, periodische Spline-Approximation zurückgegeben. Die Werte von y[m-1] und w[m-1] werden nicht verwendet. Der Standardwert ist Null, was der Randbedingung „not-a-knot“ entspricht.

quietbool, optional

Ungleich Null, um Meldungen zu unterdrücken.

Rückgabe:
tcktuple

Ein Tupel (t,c,k), das den Knotensatz, die B-Spline-Koeffizienten und den Grad des Splines enthält.

fparray, optional

Die gewichtete Summe der quadrierten Residuen der Spline-Approximation.

ierint, optional

Ein Ganzzahl-Flag für den Erfolg von splrep. Erfolg wird angezeigt, wenn ier<=0. Wenn ier in [1,2,3], ist ein Fehler aufgetreten, wurde aber nicht ausgelöst. Andernfalls wird ein Fehler ausgelöst.

msgstr, optional

Eine Meldung, die dem Ganzzahl-Flag ier entspricht.

Hinweise

Siehe splev zur Auswertung des Splines und seiner Ableitungen. Verwendet die FORTRAN-Routine curfit aus FITPACK.

Der Benutzer ist dafür verantwortlich, sicherzustellen, dass die Werte von x eindeutig sind. Andernfalls liefert splrep keine sinnvollen Ergebnisse.

Wenn die Knoten t angegeben werden, müssen sie 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 gilt.

Diese Routine polstert das Koeffizientenarray c mit Nullen auf, damit es die gleiche Länge wie das Knotenset t hat (die nachfolgenden k + 1 Koeffizienten werden von den Auswertungsroutinen splev und BSpline ignoriert). Dies steht im Gegensatz zu splprep, das die Koeffizienten nicht mit Nullen aufpolstert.

Die Standard-Randbedingung ist „not-a-knot“, d. h. das erste und zweite Segment am Ende einer Kurve sind dasselbe Polynom. Weitere Randbedingungen finden Sie in CubicSpline.

Referenzen

Basiert auf Algorithmen, die in [1], [2], [3] und [4] beschrieben sind.

[1]

P. Dierckx, „An algorithm for smoothing, differentiation and integration of experimental data using spline functions“, J.Comp.Appl.Maths 1 (1975) 165-184.

[2]

P. Dierckx, „A fast algorithm for smoothing data on a rectangular grid while using spline functions“, SIAM J.Numer.Anal. 19 (1982) 1286-1304.

[3]

P. Dierckx, „An improved algorithm for curve fitting with spline functions“, report tw54, Dept. Computer Science,K.U. Leuven, 1981.

[4]

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

Beispiele

Sie können 1-D-Punkte mit einer B-Spline-Kurve interpolieren. Weitere Beispiele finden Sie im Tutorial unter im Tutorial.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.interpolate import splev, splrep
>>> x = np.linspace(0, 10, 10)
>>> y = np.sin(x)
>>> spl = splrep(x, y)
>>> x2 = np.linspace(0, 10, 200)
>>> y2 = splev(x2, spl)
>>> plt.plot(x, y, 'o', x2, y2)
>>> plt.show()
../../_images/scipy-interpolate-splrep-1.png