scipy.interpolate.

LSQUnivariateSpline#

класс scipy.interpolate.LSQUnivariateSpline(x, y, t, w=None, ограничивающая рамка=[None, None, k=3, расширение=0, check_finite=False)[источник]#

1-D сплайн с явными внутренними узлами.

Наследие

Этот класс считается устаревшим и больше не будет получать обновления. Хотя в настоящее время у нас нет планов по его удалению, мы рекомендуем, чтобы новый код использовал более современные альтернативы. В частности, мы рекомендуем использовать make_lsq_spline вместо этого.

Аппроксимирует сплайн y = spl(x) степени k к предоставленному x, y data. t определяет внутренние узлы сплайна

Параметры:
x(N,) array_like

Размерность входных точек данных – должна быть возрастающей

y(N,) array_like

Входная размерность точек данных

t(M,) array_like

внутренние узлы сплайна. Должны быть в порядке возрастания и:

bbox[0] < t[0] < ... < t[-1] < bbox[-1]
w(N,) array_like, optional

веса для сплайн-аппроксимации. Должны быть положительными. Если None (по умолчанию), все веса равны 1.

ограничивающая рамка(2,) array_like, необязательный

2-последовательность, задающая границы интервала аппроксимации. Если None (по умолчанию), bbox = [x[0], x[-1]].

kint, необязательный

Степень сглаживающего сплайна. Должна быть 1 <= k <= 5. По умолчанию k = 3, кубический сплайн.

расширениеint или str, необязательно

Управляет режимом экстраполяции для элементов, не находящихся в интервале, определенном последовательностью узлов.

  • если ext=0 или 'extrapolate', вернуть экстраполированное значение.

  • если ext=1 или ‘zeros’, вернуть 0

  • если ext=2 или ‘raise’, вызвать ValueError

  • если ext=3 для ‘const’, вернуть граничное значение.

Значение по умолчанию 0.

check_finitebool, необязательно

Проверять ли, что входные массивы содержат только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, бесконечному выполнению или бессмысленным результатам), если входные данные содержат бесконечности или NaN. По умолчанию: False.

Методы

__call__(x[, nu, ext])

Вычислить сплайн (или его nu-ю производную) в позициях x.

antiderivative([n])

Создайте новый сплайн, представляющий первообразную этого сплайна.

derivative([n])

Создать новый сплайн, представляющий производную этого сплайна.

derivatives(x)

Вернуть все производные сплайна в точке x.

get_coeffs()

Вернуть коэффициенты сплайна.

get_knots()

Возвращает позиции внутренних узлов сплайна.

get_residual()

Вернуть взвешенную сумму квадратов остатков аппроксимации сплайном.

integral(a, b)

Возвращает определенный интеграл сплайна между двумя заданными точками.

roots()

Возвращает нули сплайна.

set_smoothing_factor(s)

Продолжить вычисление сплайна с заданным коэффициентом сглаживания s и узлами, найденными при последнем вызове.

validate_input

Вызывает:
ValueError

Если внутренние узлы не удовлетворяют условиям Шёнберга-Уитни

Смотрите также

UnivariateSpline

гладкий одномерный сплайн для аппроксимации заданного набора точек данных.

InterpolatedUnivariateSpline

Интерполирующий одномерный сплайн для заданного набора точек данных.

splrep

функция для нахождения B-сплайнового представления 1-D кривой

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.

Примеры

>>> 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.])

Построение сплайна МНК с использованием узлов другого сплайна:

>>> 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.])