Sto cercando di trovare un pacchetto numerico che si adatti ad una spline naturale che minimizzi i minimi quadrati pesati.Python Least-Squares Natural Splines
C'è un pacchetto in scipy che fa quello che voglio per le spline non naturali.
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')
Grazie per la risposta. Il file che hai indicato interpola qualsiasi dato con una spline naturale. Ciò significa che la curva attraverserà ogni punto dei dati. Se i dati sono rumorosi (nel mio caso lo è), questa è una brutta cosa da fare. Se separi i tuoi dati in bin e fai un'approssimazione minima, possiamo ottenere una curva uniforme che non interpola esattamente i dati (che è meglio con i dati rumorosi). Penso che dovrò scrivere la lezione da solo, ma sembra essere ancora una cosa che può andare storta. Grazie ancora. – Eldila
Ho ottenuto il mio codice di lavoro. Inoltre, ho guardato di nuovo la seconda opzione usando il pacchetto pyD3D. All'inizio ho pensato che fosse solo un'interpolazione, ma ora non ne sono sicuro. Ad ogni modo, segnerò la tua risposta come risposta accettata. – Eldila
solo per essere chiari, la risposta che afferma s = 0.0 produce una spline "naturale" è, credo, errata - la spline naturale dovrebbe avere una condizione sulla seconda derivata agli endpoint che sembra non essere implementata in scipy – Noah