Как интерпретировать результат scipy.interpolate.splrep? - PullRequest
0 голосов
/ 07 февраля 2019

Мне нужно разместить сплайны, состоящие из полиномов 3-го порядка, на 1-мерной линии, определенной в плоскости xy.Производная многочленов должна быть одинаковой на стыках.Ожидаемый результат - список полиномов 3-го порядка, определяемых их начальной точкой (узлами сплайнов) и их полиномиальными коэффициентами.

Я подумал, что функция расщепления scipy будет идеальной для этого.Однако у меня есть проблемы с пониманием результата функции.Например, следующий код дает следующие результаты:

x = np.linspace(0, 10, 100)
y = np.sin(x)
sp1 = scipy.interpolate.splrep(x, y, k = 3, t = [2, 6])

result (массив "knot" и "factor" из sp1):

knots: [ 0.,  0.,  0.,  0.,  2.,  6., 10., 10., 10., 10.]
coefficients: [-0.32946251,  1.55647594,  0.19883333, -2.08984459,  2.79531098,
   -1.14372454,  0.        ,  0.        ,  0.        ,  0.        ]

Из документации и из моего математического пониманияЯ ожидаю, что базовый код соответствует 3 сплайнам на точках: один от 0 до 2, один от 2 до 6 и один от 6 до 10. Каковы тогда уравнения этих сплайнов?Почему у меня только 6 коэффициентов?Разве у меня не должно быть 12 (3 * 4)?

Примечание: я знаю, что существуют функции, такие как splev, для оценки результата - мне это не нужно.Мне нужны только параметры сплайнов.

1 Ответ

0 голосов
/ 07 февраля 2019

Это немного сложно интерпретировать.

Примечания

См. splev для оценки сплайна и его производных.Число измерений N должно быть меньше 11. Число коэффициентов в массиве c на k+1 меньше количества узлов, len(t).Это в отличие от splrep, который обнуляет массив коэффициентов, чтобы иметь ту же длину, что и массив узлов.Эти дополнительные коэффициенты игнорируются процедурами оценки, splev и BSpline.

Поскольку эти наборы функций сплайн-интерполяции охватывают FITPACK * подпрограммы splev , вам нужно посмотреть, что значат коэффициенты там.В документации подпрограммы:

c    t    : array,length n, which contains the position of the knots.
c    n    : integer, giving the total number of knots of s(x).
c    c    : array,length n, which contains the b-spline coefficients.

Возвращение полного круга к scipy.Он разъясняет формулу BSpline , а также указывает, как он использует коэффициенты и какова их ожидаемая длина.

Чтобы убедиться, что вы вводите правильные данные, всегда важно соотносить это с математическим определением BSplines , чтобы определить, как узлы и контрольные точки вам нужны для данного порядкаBSpline.

...