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')
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top