为一组点插值多项式。
多项式通过所有对(xi,yi)。可以在每个点xi处另外指定多个导数;这可以通过重复值xi并将导数指定为连续的yi值来完成。
允许评估多项式及其所有导数。出于数值稳定性的考虑,尽管可以通过评估所有导数来获得多项式的系数,但该函数不会计算多项式的系数。
参数:
xi:array_like, length N已知的x-coordinates。必须按升序排序。
yi:array_like已知的y-coordinates。当xi连续出现两次或两次以上时,相应的yi表示导数值。
axis:int, 可选参数yi数组中的轴对应于x坐标值。
注意:
请注意,此处实现的算法不一定是已知的数值最稳定的算法。此外,即使在一个精确的计算世界中,除非非常仔细地选择x坐标-切比雪夫零点(例如cos(i * pi /n))是一个不错的选择-多项式插值本身由于Runge现象是一个非常ill-conditioned的过程。一般而言,即使使用well-chosen x值,度数也超过约30会导致此代码中的数值不稳定问题。
参考文献:
Krogh,“多项式插值和数值微分的有效算法”,1970年。
例子:
要生成在0和1处为零且在0处具有导数2的多项式,请调用
>>> from scipy.interpolate import KroghInterpolator
>>> KroghInterpolator([0,0,1],[0,2,0])
这构造了二次2 * X ** 2-2 * X。微分条件由xi数组中的重复零表示;相应的yi值为函数值0和2的导数。
再举一个例子,给定每个点的xi,yi和一个导数ypi,可以将适当的数组构造为:
>>> xi = np.linspace(0, 1, 5)
>>> yi, ypi = np.random.rand(2, 5)
>>> xi_k, yi_k = np.repeat(xi, 2), np.ravel(np.dstack((yi,ypi)))
>>> KroghInterpolator(xi_k, yi_k)
要生成vector-valued多项式,请为yi提供一个高维数组:
>>> KroghInterpolator([0,1],[[2,3],[4,5]])
这构造了一个线性多项式,给定了(2,3)为0和(4,5)为1。
属性
dtype:
方法:
__call__(self, x)
评估插值
derivative(self, x[, der])
评估点x处的多项式的一个导数
derivatives(self, x[, der])
评估点x处的多项式的许多导数