【发布时间】:2019-02-07 13:31:13
【问题描述】:
我需要在 x-y 平面中定义的一维线上拟合由三阶多项式组成的样条线。多项式的导数在关节处必须相等。预期的输出是一个三阶多项式列表,由它们的起点(样条结)和它们的多项式系数定义。
我认为 scipy 的 splrep 函数非常适合这个。但是我无法理解函数的结果。例如,下面的代码会产生这些结果:
x = np.linspace(0, 10, 100)
y = np.sin(x)
sp1 = scipy.interpolate.splrep(x, y, k = 3, t = [2, 6])
结果(sp1 中的“结”和“系数”数组):
knots: [ 0., 0., 0., 0., 2., 6., 10., 10., 10., 10.]
coefficients: [-0.32946251, 1.55647594, 0.19883333, -2.08984459, 2.79531098,
-1.14372454, 0. , 0. , 0. , 0. ]
根据文档和我的数学理解,我希望底层代码在点上适合 3 个样条曲线:一个从 0 到 2,一个从 2 到 6,一个从 6 到 10。这些样条曲线的方程是什么然后?为什么我只有 6 个系数?我不应该有 12 (3*4) 吗?
注意:我知道有诸如 splev 之类的函数来评估结果——我不需要。我只需要样条的参数。
【问题讨论】:
-
可能有助于查看
scipy.interpolate.BSpline。 -
我之前检查过,但是在构造 BSpline 对象后,我只能访问问题中指定的相同数组。
-
确切的定义在 BSpline 的文档中给出
-
我有一个小问题,我们可以在 splrep 中为同一个 x 传递多个 Y 值进行插值吗?