将B样条表示为分段三次函数

3 投票
1 回答
1828 浏览
提问于 2025-04-18 03:52

我正在使用Scipy的SmoothBivariateSpline类来创建一个二元数据的三次B样条曲线。现在我需要写出这个样条曲线的分段多项式表达式。

我的数学基础不是很好,所以我无法自己写出一个算法,把SmoothBivariateSpline的输出(t, c, k)转换成多项式表示。如果可以的话,能不能给我一些建议,告诉我该怎么做?我注意到Scipy有一个叫interpolate.ppform的东西,但我找不到相关的文档,这个东西有用吗?

我考虑过的一种方法是把样条曲线的范围分成几个区域,每个节点处分开(总共有(n-1)^2个区域,其中n是节点的数量),然后在每个区域内对样条曲线上的多个点进行三次回归,以便为每个区域计算出一个三次回归的数据。这种方法可行吗?

前一种方法看起来更严谨,所以我更倾向于使用那种,但后一种方法也可以接受。

1 个回答

5

B样条可以高效地转换成分段多项式。

在即将发布的Scipy 0.14.0版本中,这个转换变得非常简单,因为它新增了一个叫做 scipy.interpolate.PPoly.from_spline 的功能。

从样条 t, c, k 计算分段多项式的算法其实很简单,所以在这之前,你也可以自己写一个函数来计算多项式的系数。具体的实现可以参考这个链接:https://github.com/scipy/scipy/blob/master/scipy/interpolate/interpolate.py#L938

撰写回答