J'essaie de trouver un ensemble numérique qui s'adaptera à une spline naturelle qui minimise les moindres carrés pondérés.Python Moindres carrés naturels Splines
Il y a un paquet dans scipy qui fait ce que je veux pour les splines non naturelles.
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')
Merci pour la réponse. Le fichier que vous avez pointé va interpoler toutes les données avec une spline naturelle. Cela signifie que la courbe traversera tous les points des données. Si les données sont bruyantes (dans mon cas, c'est le cas), c'est une mauvaise chose à faire. Si vous séparez vos données en cases et faites une approximation par les moindres carrés, nous pouvons obtenir une courbe lisse qui n'interpole pas les données exactement (ce qui est préférable avec des données bruitées). Je pense que je vais devoir écrire la classe moi-même, mais cela semble être une chose de plus qui peut mal tourner. Merci encore. – Eldila
J'ai mon propre code de travail. Aussi, j'ai regardé la deuxième option en utilisant le paquet pyD3D à nouveau. Au début, je pensais que c'était juste une interpolation, mais je ne suis pas sûr de ça maintenant. De toute façon, je vais marquer votre réponse comme la réponse acceptée. – Eldila
juste pour être clair, la réponse affirmant que s = 0.0 donne une spline «naturelle» est, je crois, incorrecte - la spline naturelle devrait avoir une condition sur la deuxième dérivée aux extrémités qui ne semble pas être mis en œuvre dans scipy – Noah