scipy.interpolate.

LSQUnivariateSpline#

class scipy.interpolate.LSQUnivariateSpline(x, y, t, w=None, bbox=[None, None], k=3, ext=0, check_finite=False)[源代码]#

具有显式内部节点的 1-D 样条。

旧版

此类被认为是旧版,将不再接收更新。虽然我们目前没有计划删除它,但我们建议新代码改用更现代的替代方案。 具体来说,我们建议改用 make_lsq_spline

k 次的样条 y = spl(x) 拟合到提供的 xy 数据。 t 指定样条的内部节点

参数:
x(N,) 类数组

数据点的输入维度 - 必须递增

y(N,) 类数组

数据点的输入维度

t(M,) 类数组

样条的内部节点。必须按升序排列,并且

bbox[0] < t[0] < ... < t[-1] < bbox[-1]
w(N,) 类数组,可选

样条拟合的权重。必须为正数。如果为 None(默认),则权重均为 1。

bbox(2,) 类数组,可选

指定近似间隔边界的 2 序列。如果为 None(默认),则 bbox = [x[0], x[-1]]

kint,可选

平滑样条的阶数。必须为 1 <= k <= 5。默认值为 k = 3,即三次样条。

extint 或 str,可选

控制不在由节点序列定义的间隔内的元素的外推模式。

  • 如果 ext=0 或 ‘extrapolate’,则返回外推值。

  • 如果 ext=1 或 ‘zeros’,则返回 0

  • 如果 ext=2 或 ‘raise’,则引发 ValueError

  • 如果 ext=3 或 ‘const’,则返回边界值。

默认值为 0。

check_finitebool,可选

是否检查输入数组是否仅包含有限数字。禁用可能会提高性能,但如果输入确实包含无穷大或 NaN,则可能会导致问题(崩溃、不终止或不合理的结果)。默认值为 False。

引发:
ValueError

如果内部节点不满足 Schoenberg-Whitney 条件

另请参阅

UnivariateSpline

用于拟合给定数据点集的平滑单变量样条。

InterpolatedUnivariateSpline

用于给定数据点集的插值单变量样条。

splrep

查找 1-D 曲线的 B 样条表示的函数

splev

评估 B 样条或其导数的函数

sproot

查找三次 B 样条根的函数

splint

评估两个给定点之间 B 样条的定积分的函数

spalde

评估 B 样条的所有导数的函数

备注

数据点的数量必须大于样条阶数 k

节点 t 必须满足 Schoenberg-Whitney 条件,即必须存在数据点 x[j] 的子集,使得对于 j=0, 1,...,n-k-2t[j] < x[j] < t[j+k+1]

示例

>>> import numpy as np
>>> 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 处评估样条(或其 nu 阶导数)。

antiderivative([n])

构造一个表示此样条的反导数的新样条。

derivative([n])

构造一个表示此样条导数的新样条。

derivatives(x)

返回样条在点 x 处的所有导数。

get_coeffs()

返回样条系数。

get_knots()

返回样条内部节点的位置。

get_residual()

返回样条近似的加权平方残差和。

integral(a, b)

返回两个给定点之间样条的定积分。

roots()

返回样条的零点。

set_smoothing_factor(s)

使用给定的平滑因子 s 和上次调用时找到的节点继续样条计算。

validate_input