运行以下代码:
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
import scipy.interpolate
x = np.arange(-3, 4)
y = xs**2
spline = sp.interpolate.CubicSpline(x, y, bc_type=((2, 0), (2, 0)))
x2 = np.arange(-10, 11)
plt.plot(x2, spline(x2), label="y2")
plt.plot(x2, spline(x2, 1), label="y2'")
plt.plot(x2, spline(x2, 2), label="y2''")
plt.plot(x2, spline(x2, 3), label="y2'''")
plt.legend()
plt.show()
在外推的尾巴向下弯曲时产生一个估计:
为什么尾巴在外推区域向下弯曲?我的直觉是,估计值将合理地近似样条曲线的内部区域上的抛物线,而尾值是线性外推的结果。
另外,我了解到通过施加“自然”样条曲线边界条件,我绝对无法满足该特定函数的要求,但是我试图理解该bc_type
参数的工作原理。
该文件说:
根据第一个和最后一个间隔外推到边界点
例如,对于x <-3所做的所有操作都使用与-3 <x <-2(结之间最左边的间隔)所用的公式相同的公式。同样,x> 4的公式与3 <x <4所用的公式相同。
这些将是一些三次多项式,可以插值它们应该插值的两个值,但不能期望它们遵循函数中的任何大规模模式。
简而言之,这种推断是没有用的。样条线没有,也永远不会用作外推工具。
InterpolatedUnivariateSpline有一个更合理的外推选项,即通过最接近的边界值(通过水平线扩展图形)。但是,如果您想要某种实际上遵循数据大规模行为的内容,请不要查看scipy.interpolate
模块:而是curve_fit
从中检出optimization
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句