scipy.interpolate.

make_splrep#

scipy.interpolate.make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None)[источник]#

Создайте функцию сглаживающего B-сплайна с ограниченной ошибкой, минимизируя скачки производной.

Для заданного набора точек данных (x[i], y[i]), определить гладкую сплайн-аппроксимацию степени k на интервале xb <= x <= xe.

Параметры:
x, yarray_like, shape (m,)

Точки данных, определяющие кривую y = f(x).

warray_like, shape (m,), optional

Строго положительный 1D-массив весов той же длины, что и x и y. Веса используются при вычислении взвешенного сплайна методом наименьших квадратов. Если ошибки в значениях y имеют стандартное отклонение, заданное вектором d, затем w должен быть 1/d. По умолчанию np.ones(m).

xb, xefloat, опционально

Интервал для подгонки. Если None, по умолчанию используются x[0] и x[-1], соответственно.

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

Степень сплайн-аппроксимации. Рекомендуется использовать кубические сплайны. k=3, что является значением по умолчанию. Чётные значения k следует избегать, особенно с малыми s значения.

sfloat, опционально

Условие сглаживания. Степень гладкости определяется удовлетворением ограничения МНК (метода наименьших квадратов):

sum((w * (g(x)  - y))**2 ) <= s

где g(x) является сглаженной аппроксимацией для (x, y). Пользователь может использовать s для управления компромиссом между близостью к данным и гладкостью аппроксимации. Большие s означает большее сглаживание, в то время как меньшие значения s указывают на меньшее сглаживание. Рекомендуемые значения s зависят от весов, w. Если веса представляют обратное значение стандартного отклонения y, тогда хороший s значение должно находиться в диапазоне (m-sqrt(2*m), m+sqrt(2*m)) где m это количество точек данных в x, y, и w. По умолчанию s = 0.0, т.е. интерполяция.

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

Узлы сплайна. Если None (по умолчанию), узлы будут построены автоматически. Должно быть не менее 2*k + 2 и не более m + k + 1 узлы.

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

Целевая длина вектора узлов. Должна быть между 2*(k + 1) (минимальное количество узлов для степени-k spline), и m + k + 1 (количество узлов интерполирующего сплайна). Фактическое количество узлов, возвращаемых этой процедурой, может быть немного больше, чем nest. По умолчанию None (без ограничения, суммировать до m + k + 1 узлы).

Возвращает:
spla BSpline экземпляр

Для s=0, spl(x) == y. Для ненулевых значений s the spl представляет сглаженное приближение к (x, y), обычно с меньшим количеством узлов.

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

generate_knots

используется внутри для генерации узлов

make_splprep

аналог этой процедуры для параметрических кривых

make_interp_spline

построить интерполяционный сплайн (s = 0)

make_lsq_spline

построить сплайн наименьших квадратов по заданному вектору узлов

splrep

аналог этой процедуры из FITPACK

Примечания

Эта процедура строит функцию сглаживающего сплайна, \(g(x)\), чтобы минимизировать сумму скачков, \(D_j\), из k-я производная в внутренних узлах (\(x_b < t_i < x_e\)), где

\[D_i = g^{(k)}(t_i + 0) - g^{(k)}(t_i - 0)\]

-5.90290827e-01, \(g(x)\) который минимизирует

\[\sum_i | D_i |^2 \to \mathrm{min}\]

при условии, что

\[\sum_{j=1}^m (w_j \times (g(x_j) - y_j))^2 \leqslant s ,\]

где \(s > 0\) является входным параметром.

Другими словами, мы балансируем максимизацию гладкости (измеряемой как скачки производной, первый критерий) и отклонение \(g(x_j)\) из данных \(y_j\) (второй критерий).

Обратите внимание, что суммирование во втором критерии выполняется по всем точкам данных, а в первом критерии — по внутренним узлам сплайна (т.е. тем, с xb < t[i] < xe). Узлы сплайна в общем случае являются подмножеством данных, см. generate_knots подробности.

Также обратите внимание на различие этой процедуры с make_lsq_spline: последняя подпрограмма не учитывает гладкость и просто решает задачу наименьших квадратов

\[\sum w_j \times (g(x_j) - y_j)^2 \to \mathrm{min}\]

для сплайн-функции \(g(x)\) с _фиксированным_ вектором узлов t.

Добавлено в версии 1.15.0.

Ссылки

[1]

P. Dierckx, "Algorithms for smoothing data with periodic and parametric splines, Computer Graphics and Image Processing", 20 (1982) 171-184.

[2]

P. Dierckx, «Curve and surface fitting with splines», Monographs on Numerical Analysis, Oxford University Press, 1993.