scipy.interpolate.

make_splprep#

scipy.interpolate.make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=None)[источник]#

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

Для заданного списка из N одномерных массивов, x, которые представляют кривую в N-мерном пространстве, параметризованную u, найти гладкую аппроксимирующую сплайн-кривую g(u).

Параметры:
xarray_like, shape (m, ndim)

Выборочные точки данных, представляющие кривую в ndim размерности. Типичное использование - список одномерных массивов, каждый длиной m.

warray_like, shape(m,), optional

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

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

Массив значений параметров для кривой в параметрической форме. Если не задан, эти значения вычисляются автоматически, согласно:

v[0] = 0
v[i] = v[i-1] + distance(x[i], x[i-1])
u[i] = v[i] / v[-1]
ub, uefloat, опционально

Конечные точки интервала параметров. По умолчанию u[0] и u[-1].

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

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

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

Условие сглаживания. Степень гладкости определяется удовлетворением условий:

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

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

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(u) == x. Для ненулевых значений s, spl представляет сглаженное приближение к x, обычно с меньшим количеством узлов.

undarray

Значения параметров

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

generate_knots

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

make_splrep

аналог этой процедуры для 1D функций

make_interp_spline

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

make_lsq_spline

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

splprep

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

Примечания

Для заданного набора \(m\) точек данных в \(D\) размерности, \(\vec{x}_j\), с \(j=1, ..., m\) и \(\vec{x}_j = (x_{j; 1}, ..., x_{j; D})\), эта процедура строит параметрическую сплайн-кривую \(g_a(u)\) с \(a=1, ..., D\), чтобы минимизировать сумму скачков, \(D_{i; a}\), из k-я производная во внутренних узлах (\(u_b < t_i < u_e\)), где

\[D_{i; a} = g_a^{(k)}(t_i + 0) - g_a^{(k)}(t_i - 0)\]

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

\[\sum_i \sum_{a=1}^D | D_{i; a} |^2 \to \mathrm{min}\]

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

\[\sum_{j=1}^m \sum_{a=1}^D (w_j \times (g_a(u_j) - x_{j; a}))^2 \leqslant s\]

где \(u_j\) является значением параметра, соответствующим точке данных \((x_{j; 1}, ..., x_{j; D})\), и \(s > 0\) является входным параметром.

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

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

Добавлено в версии 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.