scipy.interpolate.BPoly.

from_derivatives#

classmethod BPoly.from_derivatives(xi, yi, orders=None, extrapolate=None)[源代码]#

构建一个分段多项式,使用伯恩斯坦基底,与断点处的指定值和导数兼容。

参数:
xiarray_like

已排序的 x 坐标一维数组

yiarray_like 或 array_likes 列表

yi[i][j] 是在 xi[i] 处已知的第 j 个导数

ordersNone 或 int 或 ints 的 array_like。默认值:None。

指定局部多项式的次数。如果不是 None,则会忽略某些导数。

extrapolatebool 或 'periodic',可选

如果为 bool,则确定是根据第一个和最后一个区间外推到超出范围的点,还是返回 NaN。如果为 'periodic',则使用周期性外推。默认值为 True。

说明

如果在断点 x 处指定了 k 个导数,则构造的多项式在 x 处正好是 k 次连续可微的,除非明确提供了 order。在后一种情况下,断点处多项式的平滑度由 order 控制。

order 和可用导数的数量推断出在每个端点要匹配的导数数量。如果可能,它使用每个端点相同数量的导数;如果数量为奇数,它会尝试从 y2 中获取额外的一个。在任何情况下,如果在一个端点或另一个端点没有足够的可用导数,它会从另一端点获取足够的导数来补足总数。

如果次数太高且没有足够的可用导数,则会引发异常。

示例

>>> from scipy.interpolate import BPoly
>>> BPoly.from_derivatives([0, 1], [[1, 2], [3, 4]])

创建一个在 [0, 1] 上定义的三次多项式 f(x),使得 f(0) = 1, df/dx(0) = 2, f(1) = 3, df/dx(1) = 4

>>> BPoly.from_derivatives([0, 1, 2], [[0, 1], [0], [2]])

创建一个分段多项式 f(x),使得 f(0) = f(1) = 0, f(2) = 2,且 df/dx(0) = 1。根据提供的导数数量,局部多项式的次数在 [0, 1] 上为 2,在 [1, 2] 上为 1。请注意,对 x = 1x = 2 处的导数没有施加任何限制。

事实上,多项式的显式形式为

f(x) = | x * (1 - x),  0 <= x < 1
       | 2 * (x - 1),  1 <= x <= 2

所以 f’(1-0) = -1 且 f’(1+0) = 2