Python Mínimos Quadrados Natural Splines
Pergunta
Eu estou tentando encontrar um pacote numérico que vai caber uma spline natural que minimiza ponderados mínimos quadrados.
Há um pacote na scipy que faz o que eu quero para estrias não naturais.
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')
Solução
O interior de arquivo spline.py deste tar arquivo de desta página faz um ajuste de spline natural, por padrão. Há também algum código em desta página que alega principalmente o que você quer. A pyD3D empacotar também tem um naturais função spline em sua módulo pyDataUtils . Este último parece ser o mais promissor para mim. No entanto, não parece ter a opção de definir seus próprios nós. Talvez se você olhar para a fonte que você pode encontrar uma maneira de corrigir isso.
Além disso, eu achei esta mensagem na lista de discussão Scipy que diz que o uso de s = 0,0 (como no seu código dado) faz estrias equipado usando o procedimento acima natural de acordo o autor da mensagem. Eu fiz encontrar função deste splmake que tem uma opção para fazer um ajuste de spline natural, mas ao olhar para a fonte eu achei que ele ainda não está implementado.