Pregunta

Estoy tratando de encontrar un paquete numérico que se ajuste a una spline natural que minimiza los mínimos cuadrados ponderados.

Hay un paquete en el que scipy hace lo que yo quiero para estrías no naturales.

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

Solución

El archivo spline.py interior de este alquitrán archivo de esta página hace un ajuste de spline natural, de forma predeterminada. También hay algo de código en esta página que pretende sobre todo lo que quiere. El pyD3D paquete también tiene un naturales función spline en su módulo pyDataUtils . Este último parece el más prometedor para mí. Sin embargo, no parecen tener la opción de configurar sus propios nudos. Tal vez si nos fijamos en la fuente se puede encontrar una manera de rectificar eso.

Además, he encontrado este mensaje en la scipy lista de correo que dice que el uso de s = 0,0 (como en el código dado) hace estrías ajustaron utilizando el procedimiento anterior natural según el autor del mensaje. Me he encontrado esta función splmake que tiene una opción para hacer un ajuste de spline natural, pero al mirar la fuente me encontré con que no se ha implementado todavía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top