Python 最小二乘自然样条

8 投票
1 回答
7426 浏览
提问于 2025-04-15 20:24

我正在寻找一个数值计算的工具包,它可以拟合自然样条曲线,并且能够最小化加权最小二乘法。

在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

在这个来自tar文件文件里,默认情况下会进行自然样条拟合。还有一些代码在这个页面上,声称可以满足你的大部分需求。pyD3D包里也有一个自然样条函数,在它的pyDataUtils模块里。对我来说,这个看起来最有希望。不过,它似乎没有设置自定义节点的选项。也许你可以查看源代码,找到解决办法。

另外,我在Scipy邮件列表上发现了这条消息,里面提到使用s=0.0(就像你给出的代码那样)会使得根据上面的方法拟合的样条是自然的。还有一个我找到的splmake函数,它有一个选项可以做自然样条拟合,但查看源代码后发现这个功能还没有实现。

撰写回答