Python наименьших квадратов естественные сплайны - PullRequest
8 голосов
/ 14 марта 2010

Я пытаюсь найти числовой пакет, который будет соответствовать естественному сплайну, который минимизирует наименьшие квадраты.

В scipy есть пакет, который делает то, что я хочу для неестественных сплайнов.

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')

1 Ответ

6 голосов
/ 14 марта 2010

Файл spline.py внутри этого файла tar из этой страницы по умолчанию соответствует естественному сплайну. На этой странице также есть код, который в основном претендует на то, что вы хотите. Пакет pyD3D также имеет функцию естественного сплайна в своем модуле pyDataUtils . Этот последний выглядит наиболее перспективным для меня. Тем не менее, он не имеет возможности установить свои собственные узлы. Может быть, если вы посмотрите на источник, вы найдете способ исправить это.

Кроме того, я обнаружил это сообщение в списке рассылки Scipy, в котором говорится, что использование s = 0.0 (как в данном коде) делает сплайны, подогнанные с использованием вышеуказанной процедуры, естественными в соответствии с автором сообщения. Я нашел эту функцию splmake , которая имеет опцию для естественного подбора сплайна, но, посмотрев на источник, я обнаружил, что она еще не реализована.

...