Domanda

Sto cercando di trovare un pacchetto numerico che si inserisce una spline naturale che riduce al minimo ponderate minimi quadrati.

C'è un pacchetto in SciPy che fa quello che voglio per le spline innaturali.

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')
È stato utile?

Soluzione

Il file spline.py all'interno di questo tar il file da questa pagina fa uno spline scelta naturale per impostazione predefinita. C'è anche qualche codice su questa pagina che pretende di gran parte ciò che si desidera. Il pyD3D pacchetto ha anche un spline naturale nella sua modulo pyDataUtils . Quest'ultima sembra la più promettente per me. Tuttavia, non sembra avere la possibilità di decidere i propri nodi. Forse, se si guarda alla sorgente è possibile trovare un modo per rimediare.

Inoltre, ho trovato questo messaggio sulla mailing list SciPy che dice che l'uso di s = 0.0 (come nel tuo codice dato) rende spline montati utilizzando la procedura sopra descritta naturale secondo l'autore del messaggio. Ho trovato questa funzione splmake che ha un'opzione per fare una spline scelta naturale, ma al momento guardando il sorgente ho scoperto che non è ancora implementata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top