Question

Je suis en train de trouver un paquet numérique qui s'adaptera une spline naturelle qui minimise les moindres carrés pondérés.

Il y a un paquet dans scipy qui fait ce que je veux pour splines contre nature.

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')
Était-ce utile?

La solution

Le fichier spline.py à l'intérieur de cette fichier goudron de cette page fait un ajustement de spline naturelle par défaut. Il y a aussi un code sur cette page qui prétend surtout ce que vous voulez. paquet pyD3D a également fonction spline naturelle dans sa module de pyDataUtils. Ce dernier semble me le plus prometteur. Toutefois, il ne semble pas avoir la possibilité de définir vos propres noeuds. Peut-être que si vous regardez la source que vous pouvez trouver un moyen de corriger cette situation.

En outre, je trouve ce message sur la liste de diffusion scipy qui dit que l'utilisation de = 0,0 (comme dans votre code donné) fait splines équipé en utilisant votre procédure ci-dessus naturel selon l'auteur du message. Je ne trouve cette fonction splmake qui a une option faire un ajustement spline naturel, mais à regarder la source que je trouve qu'il n'a pas encore été mis en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top