KroghInterpolator#
- class scipy.interpolate.KroghInterpolator(xi, yi, axis=0)[源代码][源代码]#
一组点的插值多项式。
多项式通过所有点对
(xi, yi)
。此外,还可以在每个点 xi 处指定多个导数;这是通过重复值 xi 并将导数指定为连续的 yi 值来完成的。允许对多项式及其所有导数进行求值。出于数值稳定性的考虑,此函数不计算多项式的系数,尽管它们可以通过求所有导数的值来获得。
- 参数:
- xiarray_like, 形状 (npoints, )
已知的 x 坐标。必须按升序排列。
- 一类数组, 形状 (…, npoints, …)
已知的 y 坐标。当 xi 连续出现两次或更多次时,相应的 yi 表示导数值。沿插值轴的 yi 长度必须等于 xi 的长度。使用 axis 参数选择正确的轴。
- 轴int, 可选
yi 数组中对应于 x 坐标值的轴。默认为
axis=0
。
- 属性:
- dtype
方法
__call__
(x)评估插值函数
derivative
(x[, der])在点 x 处评估多项式的单个导数。
derivatives
(x[, der])在点 x 处评估多项式的几个导数
注释
请注意,这里实现的算法不一定是已知的最数值稳定的算法。此外,即使在精确计算的世界中,除非x坐标选择得非常仔细——例如,Chebyshev零点(如cos(i*pi/n))是一个不错的选择——由于Runge现象,多项式插值本身就是一个非常病态的过程。一般来说,即使选择了良好的x值,高于约三十次的次数也会导致此代码中的数值不稳定性问题。
基于 [1]。
参考文献
[1]Krogh, “多项式插值和数值微分的有效算法”, 1970.
示例
要生成一个在 0 和 1 处为零且在 0 处导数为 2 的多项式,请调用
>>> from scipy.interpolate import KroghInterpolator >>> KroghInterpolator([0,0,1],[0,2,0])
这将构造二次方程 \(2x^2-2x\) 。导数条件由 xi 数组中的重复零表示;相应的 yi 值为 0(函数值)和 2(导数值)。
再举一个例子,给定 xi、yi 和每个点的导数 ypi,可以构造适当的数组如下:
>>> import numpy as np >>> rng = np.random.default_rng() >>> xi = np.linspace(0, 1, 5) >>> yi, ypi = rng.random((2, 5)) >>> xi_k, yi_k = np.repeat(xi, 2), np.ravel(np.dstack((yi,ypi))) >>> KroghInterpolator(xi_k, yi_k)
要生成一个向量值多项式,请为 yi 提供一个更高维的数组:
>>> KroghInterpolator([0,1],[[2,3],[4,5]])
这将构造一个线性多项式,在 0 处给出 (2,3),在 1 处给出 (4,5)。