Próbuję znaleźć pakiet liczbowy, który będzie pasował do naturalnego splajnu, który minimalizuje ważone najmniejsze kwadraty.Python Least-Squares Naturalne splajny
Istnieje pakiet w scipy, który robi to, co chcę dla nienaturalnych splajnów.
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')
Dzięki za odpowiedź. Plik, który wskazałeś, interpoluje dowolne dane za pomocą naturalnego splajnu. Oznacza to, że krzywa przechodzi przez każdy punkt danych. Jeśli dane są głośne (w moim przypadku), jest to złe. Jeśli podzielisz dane na boksy i wykonasz najmniejsze przybliżenie kwadratowe, możemy uzyskać gładką krzywą, która nie interpoluje dokładnie danych (co jest lepsze w przypadku głośnych danych). Myślę, że sam będę musiał napisać klasę, ale wydaje mi się, że to jeszcze jedna rzecz, która może pójść nie tak. Dzięki jeszcze raz. – Eldila
Mam swój własny kod działa. Spojrzałem również na drugą opcję, ponownie używając pakietu pyD3D. Na początku myślałem, że to po prostu interpolacja, ale nie jestem tego teraz pewien. Tak czy inaczej, zaznaczę twoją odpowiedź jako zaakceptowaną odpowiedź. – Eldila
dla jasności, odpowiedź twierdząca, że s = 0,0 daje "naturalny" splajn, jest, jak sądzę, niepoprawny - naturalny splajn powinien mieć warunek dla drugiej pochodnej na punktach końcowych, który wydaje się nie być implementowany w scipy – Noah