scipy.interpolate.CubicSpline
的实现来获得非常相似的结果。其他样条方法的大量类都包含在 scipy.interpolate
中。from scipy.interpolate import CubicSpline
cs = CubicSpline(data['x'], data['y'])
x_range = np.arange(x_min, x_max, some_step)
plt.plot(x_range, cs(x_range), label='Cubic Spline')
CubicSpline
进行插值。该文章讨论了近似。您知道如何在Python中执行样条逼近吗? - Antony Hatchkins你的数据集可能存在一些问题...从你的n(x,y)点的图中可以看出,它们是通过直线连接的;如果你显示点而不是直线,应该能够看到你的域中点的密度,并且由于直线不均匀分布,因此密度也不均匀。假设你的域是[xmin,xmax],8阶多项式插值是很好的选择,但由于高阶和点密度奇怪地分布,它会产生波动。多项式插值不适用于外推,因为在你的域之外没有控制点。你可以通过样条来解决这个问题,一个三次自然样条将控制xmin和xmax处的导数,但为了做到这一点,你应该对数据集进行排序(x轴),并取一个滚动平均作为样条算法的控制点的子样本。如果你的问题有一个解析解(例如高斯变异函数看起来像你的点分布),只需尝试优化参数(例如高斯变异函数的范围和 sill)以最小化域内误差并遵循渐近线。