Ich versuche, ein numerisches Paket zu finden, das einen natürlichen Spline passt, der gewichtete kleinste Quadrate minimiert.Python Least-Squares Natürliche Splines
Es gibt ein Paket in scipy, das macht, was ich für unnatürliche Splines will.
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate, randn
x = np.arange(0,5,1.0/6)
xs = np.arange(0,5,1.0/500)
y = np.sin(x+1) + .2*np.random.rand(len(x)) -.1
knots = np.array([1,2,3,4])
tck = interpolate.splrep(x,y,s=0,k=3,t=knots,task=-1)
ys = interpolate.splev(xs,tck,der=0)
plt.figure()
plt.plot(xs,ys,x,y,'x')
Danke für die Antwort. Die Datei, auf die Sie verwiesen haben, interpoliert alle Daten mit einem natürlichen Spline. Dies bedeutet, dass die Kurve jeden Punkt in den Daten durchlaufen wird. Wenn die Daten laut sind (in meinem Fall ist es), ist dies eine schlechte Sache zu tun. Wenn Sie Ihre Daten in Bins aufteilen und eine Annäherung an die kleinsten Quadrate durchführen, können wir eine glatte Kurve erhalten, die die Daten nicht exakt interpoliert (was besser bei verrauschten Daten ist). Ich denke, ich werde die Klasse selbst schreiben müssen, aber es scheint nur noch eine Sache zu sein, die schief gehen kann. Danke noch einmal. – Eldila
Ich habe meinen eigenen Code funktioniert. Außerdem habe ich die zweite Option mit dem pyD3D-Paket nochmal angeschaut. Zuerst dachte ich, es wäre nur Interpolation, aber ich bin mir nicht sicher. Wie auch immer, ich werde Ihre Antwort als die akzeptierte Antwort markieren. – Eldila
nur um klar zu sein, die Antwort behauptet s = 0.0 ergibt einen "natürlichen" Spline ist, glaube ich, inkorrekt - der natürliche Spline sollte eine Bedingung auf der zweiten Ableitung an den Endpunkten haben, die nicht in scipy – Noah