Yes.
The BPoly
上课于scipy.interpolate
有一个构造方法
Bernstein 基中的分段多项式,与断点处的指定值和导数兼容。
如中所述scipy
参考,here https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.BPoly.from_derivatives.html#scipy.interpolate.BPoly.from_derivatives.
基本用法Python3
可以如下:
from numpy import linspace, sin, pi
from scipy.interpolate import BPoly, CubicSpline
xi = linspace(0, pi, 5)
xnew = linspace(0, pi, 50)
yi = sin(xi)
ynew = sin(xnew)
yder = [[yi[i], 0] for i in range(len(yi))]
cubic = CubicSpline(xi, yi)
bpoly = BPoly.from_derivatives(xi, yder)
y_bpoly = bpoly(xnew)
y_cubic = cubic(xnew)
解释
该程序为 senoid 的第一个半周期创建两个样条插值,其中一个使用CubicSpline
类,并且一个使用from_derivatives
的方法BPoly
class, 将导数设置为0
在原始曲线的每个点。
此方法的主要问题是,除非您指定每个点的导数,否则该算法不能保证平滑过渡。然而,导数在指定点得到保证。不过,这不应该出现问题,因为您正在寻找的是将导数设置为0
在每个点。
Plot
使用以下命令,您可以正确地看到不同的结果,如最后的图像所示:
import matplotlib.pyplot as plt
plt.figure()
plt.plot(xnew, y_bpoly, '-g', xnew, ynew, '--c', xnew, y_cubic, '-.m', xi, yi, '*r')
plt.legend(['BPoly', 'True', 'Cubic', 'Points'])
plt.title('Spline interpolation')
plt.grid()
plt.show()