在1.1.1以上的SymPy版本中,包括current development version,有一个内置方法interpolating_spline,它有四个参数:样条曲线度、变量、域值和范围值。在from sympy import *
DataPointsDomain = [0,1,2,3,4,5]
DataPointsRange = [3,6,5,7,9,1]
x = symbols('x')
s = interpolating_spline(3, x, DataPointsDomain, DataPointsRange)
这就回来了
^{pr2}$
它是通过给定点的“非结”三次样条曲线。在
旧答案
插值样条曲线可以用SymPy构造,但这需要一些努力。方法bspline_basis_set返回给定x值的B样条函数的基,但接下来就由您来确定它们的系数了。在
首先,我们需要节点列表,它与x值列表(下面是xv)不完全相同。端点xv[0]和xv[-1]将出现deg+1倍,其中deg是样条曲线的阶数,因为在端点处,所有系数的值都会改变(从某个值变为零)。此外,一些接近它们的x值可能根本不会出现,因为那里的系数不会发生变化(“没有结”条件)。最后,对于偶数次样条曲线(yack),内部节点放置在数据点之间的中间。所以我们需要这个助手函数:from sympy import *
def knots(xv, deg):
if deg % 2 == 1:
j = (deg+1) // 2
interior_knots = xv[j:-j]