scipy.interpolate.

KroghInterpolator#

class scipy.interpolate.KroghInterpolator(xi, yi, axis=0)[source]#

Krogh 插值器 (C∞ 平滑)。

该多项式通过所有 (xi, yi) 对。此外,可以在每个点 xi 处指定多个导数;这是通过重复 xi 值并将导数指定为连续的 yi 值来完成的。

允许对多项式及其所有导数进行求值。出于数值稳定性的原因,此函数不计算多项式的系数,尽管可以通过评估所有导数来获得它们。

参数:
xiarray_like, 形状 (npoints, )

已知 x 坐标。必须按升序排序。

yiarray_like, 形状 (…, npoints, …)

已知 y 坐标。当一个 xi 连续出现两次或多次时,相应的 yi 值表示导数值。yi 沿插值轴的长度必须等于 xi 的长度。使用 axis 参数选择正确的轴。

axisint, 可选

yi 数组中对应 x 坐标值的轴。默认为 axis=0

属性:
dtype

方法

__call__(x)

求值插值函数

derivative(x[, der])

在点 x 处求多项式的单个导数。

derivatives(x[, der])

在点 x 处求多项式的多个导数

注释

请注意,此处实现的算法不一定是已知最数值稳定的。此外,即使在精确计算的世界中,除非 x 坐标选择得非常仔细——切比雪夫零点(例如,cos(i*pi/n))是一个很好的选择——多项式插值本身就是一个非常病态的过程,这是由于龙格现象。通常,即使 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。

再举一个例子,给定 xiyi 和每个点的导数 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)。