Натуральные сплайны метода наименьших квадратов Python

StackOverflow https://stackoverflow.com/questions/2441058

  •  19-09-2019
  •  | 
  •  

Вопрос

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

В 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')
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top