BPoly#
- class scipy.interpolate.BPoly(c, x, extrapolate=None, axis=0)[源代码][源代码]#
分段多项式,根据系数和断点定义。
在
x[i]
和x[i + 1]
之间的多项式是以 Bernstein 多项式基底表示的:S = sum(c[a, i] * b(a, k; x) for a in range(k+1)),
其中
k
是多项式的次数,并且:b(a, k; x) = binom(k, a) * t**a * (1 - t)**(k - a),
其中
t = (x - x[i]) / (x[i+1] - x[i])
,而binom
是二项式系数。- 参数:
- cndarray, 形状 (k, m, …)
多项式系数,阶数 k 和 m 区间
- xndarray, 形状 (m+1,)
多项式断点。必须按递增或递减顺序排序。
- 外推bool, 可选
如果是布尔值,决定是否根据第一个和最后一个区间对边界外的点进行外推,或者返回NaN。如果是’periodic’,则使用周期性外推。默认为True。
- 轴int, 可选
插值轴。默认值为零。
- 属性:
- xndarray
断点。
- cndarray
多项式的系数。它们被重塑为一个三维数组,最后一个维度表示原始系数数组的尾随维度。
- 轴整数
插值轴。
方法
__call__
(x[, nu, extrapolate])评估分段多项式或其导数。
extend
(c, x)向多项式中添加额外的断点和系数。
derivative
([nu])构建一个新的分段多项式,表示导数。
antiderivative
([nu])构建一个新的分段多项式,表示其反导数。
integrate
(a, b[, extrapolate])计算分段多项式的定积分。
construct_fast
(c, x[, extrapolate, axis])在不进行检查的情况下构造分段多项式。
from_power_basis
(pp[, extrapolate])从幂基多项式构造一个分段Bernstein基多项式。
from_derivatives
(xi, yi[, orders, extrapolate])在Bernstein基中构造一个分段多项式,与在断点处指定的值和导数兼容。
参见
PPoly
幂基的分段多项式
注释
Bernstein 多项式的性质在文献中有详细记载,例如参见 [1] [2] [3]。
参考文献
[1]https://zh.wikipedia.org/wiki/伯恩斯坦多项式
[2]Kenneth I. Joy, Bernstein 多项式, http://www.idav.ucdavis.edu/education/CAGDNotes/Bernstein-Polynomials.pdf
[3]E. H. Doha, A. H. Bhrawy, and M. A. Saker, Boundary Value Problems, vol 2011, article ID 829546, DOI:10.1155/2011/829543.
示例
>>> from scipy.interpolate import BPoly >>> x = [0, 1] >>> c = [[1], [2], [3]] >>> bp = BPoly(c, x)
这将创建一个二次多项式
\[\begin{split}B(x) = 1 imes b_{0, 2}(x) + 2 imes b_{1, 2}(x) + 3 imes b_{2, 2}(x) \\ = 1 imes (1-x)^2 + 2 imes 2 x (1 - x) + 3 imes x^2\end{split}\]