如何从一组数据点内插单个(“非逐段”)三次样条曲线?

时间:2019-08-17 04:11:02

标签: python numpy scipy cubic-spline

我希望从一组数据点生成一个最适合这些点的三次三次样条函数。

也就是说,寻求获得最适合数据的三阶多项式函数-与分段多项式相反。 (最终目的是找到该函数的二阶导数的最大值)

我尝试过scipy.interpolate.CubicSpline,但似乎只允许生成分段三次样条。

是否存在另一个函数或另一个库,该函数或库将生成最适合给定数据点的单个三次样条?

背景:数据点来自称重传感器(重量传感器),代表两个相互接触的物理物体。目的是使立方脊椎适合数据平滑,然后计算二阶导数的最大值-为了找到它们接触的确切时刻-尽可能使用给定传感器。 (如果在此方法中观察到任何缺陷,欢迎观察)

原始数据Raw Data Points 从scipi生成的分段三次样条 Not Smooth Cubic Spline 所需的结果应会产生如下所示的曲线: Smooth single cubic spline

2 个答案:

答案 0 :(得分:2)

如果您确实需要单个抛物线,则可以使用numpy.polyfit

如果您需要的是连续的二阶导数,那么您的确是在三次样条曲线之后,它不过是连续间隔(因此是分段的)上三次立方的集合,它们匹配到第二阶导数。

根据是要插值(精确匹配数据点)还是拟合(即数据包含信号和一些噪声,并且要提取前者),是使用CubicSpline还是{{1} }。

答案 1 :(得分:0)

您可以使用多项式回归进行此操作,进行多项式回归的核心概念是

  • 根据要素创建多项式要素。例如。如果您有一项功能x,则需要添加新功能x ^ 2,x ^ 3等,直至达到您想要的程度
  • 现在您将使用新功能集训练线性回归模型
  • 您还可以根据自己想要优化的成本函数来选择与您相关的成本函数,例如RMSE,MAE等
  • 您还可以使用l1或l2之类的正则化来获得更平滑的功能

我发现这个博客解释了多项式回归
https://towardsdatascience.com/machine-learning-polynomial-regression-with-python-5328e4e8a386