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 至提供的 xy 数据。 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()
../../_images/scipy-interpolate-LSQUnivariateSpline-1_00_00.png

检查结向量:

>>> 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