我正在尝试找到一个适合自然样条的数值包,从而最小化加权最小二乘法。

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 文件 焦油文件这一页 默认情况下进行自然样条拟合。还有一些代码 这一页 这主要是你想要的。这 pyD3D包 还有一个 自然样条函数 在其 pyDataUtils 模块。最后一个对我来说看起来最有希望。然而,它似乎没有设置自己的结的选项。也许如果你查看源代码,你可以找到一种方法来纠正这个问题。

另外,我发现 这条信息 在 Scipy 邮件列表上,根据消息的作者的说法,使用 s=0.0 (如您给定的代码中所示)使得使用上述过程拟合样条变得自然。我确实找到了 这个 splmake 函数可以选择进行自然样条拟合,但在查看源代码后我发现它尚未实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top