scipy.interpolate.LSQUnivariateSpline¶
- class scipy.interpolate.LSQUnivariateSpline(x, y, t, w=None, bbox=[None, None], k=3, ext=0, check_finite=False)[源代码]¶
具有显式内部结的一维样条线。
拟合次数为y=spl(X)的样条曲线 k 至提供的 x , y 数据。 t 指定样条曲线的内部节点
- 参数
- x(n,)类似数组
数据点的输入维度--必须增加
- y(n,)类似数组
数据点的输入维度
- t(M,)类似数组
样条线的内部结。必须按升序排列,并且:
bbox[0] < t[0] < ... < t[-1] < bbox[-1]
- w(n,)array_like,可选
样条曲线拟合的权重。一定是阳性的。如果为None(默认),则权重都相等。
- bbox(2,)array_like,可选
2-指定近似间隔边界的序列。如果无(默认值),
bbox = [x[0], x[-1]]
。- k整型,可选
平滑样条曲线的阶数。必须是1<= k <=5,默认为 k =3,三次样条曲线。
- extint或str,可选
控制不在节点序列定义的间隔内的元素的外推模式。
如果ext=0或‘Extrapolate’,则返回外推值。
如果ext=1或‘零’,则返回0
如果ext=2或‘RAISE’,则引发ValueError
如果ext=3 of‘const’,则返回边界值。
默认值为0。
- check_finite布尔值,可选
是否检查输入数组是否仅包含有限数字。禁用可能会提高性能,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止或无意义的结果)。默认值为False。
- 加薪
- ValueError
如果内部节点不满足勋伯格-惠特尼条件
参见
UnivariateSpline
一种光滑的单变量样条,用于拟合给定的数据点集合。
InterpolatedUnivariateSpline
一组给定数据点的一元插值样条。
splrep
求一维曲线B样条表示的函数
splev
求B样条或其导数的函数
sproot
三次B样条的求根函数
splint
求两点间B样条定积分的一个函数
spalde
求B样条所有导数的一个函数
注意事项
数据点的数量必须大于样条阶数 k 。
打结 t 必须满足勋伯格-惠特尼条件,即必须存在数据点的子集
x[j]
这样一来,t[j] < x[j] < t[j+k+1]
,用于j=0, 1,...,n-k-2
。示例
>>> from scipy.interpolate import LSQUnivariateSpline, UnivariateSpline >>> import matplotlib.pyplot as plt >>> rng = np.random.default_rng() >>> x = np.linspace(-3, 3, 50) >>> y = np.exp(-x**2) + 0.1 * rng.standard_normal(50)
使用预定义的内部结拟合平滑样条线:
>>> t = [-1, 0, 1] >>> spl = LSQUnivariateSpline(x, y, t)
>>> xs = np.linspace(-3, 3, 1000) >>> plt.plot(x, y, 'ro', ms=5) >>> plt.plot(xs, spl(xs), 'g-', lw=3) >>> plt.show()
检查结向量:
>>> spl.get_knots() array([-3., -1., 0., 1., 3.])
使用来自另一样条线的结构建LSQ样条线:
>>> x = np.arange(10) >>> s = UnivariateSpline(x, x, s=0) >>> s.get_knots() array([ 0., 2., 3., 4., 5., 6., 7., 9.]) >>> knt = s.get_knots() >>> s1 = LSQUnivariateSpline(x, x, knt[1:-1]) # Chop 1st and last knot >>> s1.get_knots() array([ 0., 2., 3., 4., 5., 6., 7., 9.])
方法:
__call__
\(X[, nu, ext] )计算位置x处的样条线(或其第n阶导数)。
antiderivative
\([n] )构造一个表示该样条的逆导数的新样条。
derivative
\([n] )构造一个表示该样条的导数的新样条。
derivatives
\(X)返回点x处样条的所有导数。
get_coeffs
\()返回样条系数。
get_knots
\()返回样条线内部节点的位置。
get_residual
\()返回样条近似残差平方的加权和。
integral
\(a,b)返回两个给定点之间样条的定积分。
roots
\()返回样条曲线的零。
set_smoothing_factor
\(s)使用给定的平滑因子s和上次调用时找到的节点继续样条曲线计算。
validate_input