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 Intervallxb <= 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
dhaben, dann sollte w1/dsein. Standard istones(len(x)).- xb, xefloat, optional
Das Intervall für die Anpassung. Wenn None, sind dies standardmäßig
x[0]undx[-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 Sietundcfür einen gegebenen Glättungsfaktor s.Wenn
task==1, finden Sietundcfür einen anderen Wert des Glättungsfaktors s. Es muss ein vorheriger Aufruf mittask=0odertask=1für denselben Datensatz erfolgt sein (twird 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, wobeig(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, wobeimdie 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, wirdtaskautomatisch auf-1gesetzt.- 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 vony[m-1]undw[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, wennier<=0. Wennier 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.
Siehe auch
Hinweise
Siehe
splevzur Auswertung des Splines und seiner Ableitungen. Verwendet die FORTRAN-Routinecurfitaus FITPACK.Der Benutzer ist dafür verantwortlich, sicherzustellen, dass die Werte von x eindeutig sind. Andernfalls liefert
splrepkeine 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 dasst[j] < x[j] < t[j+k+1]fürj=0, 1,...,n-k-2gilt.Diese Routine polstert das Koeffizientenarray
cmit Nullen auf, damit es die gleiche Länge wie das Knotensetthat (die nachfolgendenk + 1Koeffizienten werden von den AuswertungsroutinensplevundBSplineignoriert). Dies steht im Gegensatz zusplprep, 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()