Я пытаюсь использовать пакет SciPy Python для создания сплайна через некоторые данные. Что касается вопроса here, я думаю, что причина, по которой в начале и в конце использования дублирующих узлов есть дублирующие узлы, заключается в том, что он делает зажатый сплайн. Я хочу, чтобы узлы проходили через данные (s = 0). Выходной сигнал splrep повторяет первый и последний узлы по 4 раза каждый (как в вопросе выше), и он включает внутренние точки данных в виде узлов , за исключением второй точки и следующей последней точки. Вот ММВЙ:scipy.interpolate.splrep с s = 0 повторяющимися конечными точками и исключая смежные
import math
import numpy as np
import scipy.interpolate
import matplotlib.pyplot as plt
x_dec = np.array([ 3.0289979374768700e-01, 3.0280333252410779e-01, 3.0270688524899364e-01,
3.0261045192336944e-01, 3.0251403254826026e-01, 3.0241762712469000e-01,
3.0232123565368257e-01, 3.0222485813626193e-01, 3.0212849457345037e-01])
# Make monotonically increase
x_inc = math.pi/2 - x_dec
print x_inc
y = np.array([0.914024505, 0.914049905, 0.914075289, 0.914100656, 0.914126008, 0.914151343,
0.914176662, 0.914201964, 0.91422725])
spl_tck = scipy.interpolate.splrep(x_inc,y,k=3,s=0.0)
# Print the knots
print spl_tck[0]
Вот выход:
[ 1.26789653 1.26799299 1.26808944 1.26818587 1.26828229 1.2683787 1.26847509 1.26857147 1.26866783]
[ 1.26789653 1.26789653 1.26789653 1.26789653 1.26808944 1.26818587 1.26828229 1.2683787 1.26847509 1.26866783 1.26866783 1.26866783 1.26866783]
Первая строка данные, вторая линия узлы. Как вы можете видеть, узлы повторяют первую и последнюю точки данных (x_inc[0]
и x_inc[-1]
). Затем точки данных x_inc[2]
через x_inc[-3]
- все узлы. Однако точки данных x_inc[1]
и x_inc[-2]
пропускаются как узловые точки.
Я думал, что указание s = 0 заставит сплайн проходить через все точки. Есть ли что-то в B-сплайнах и повторяется конечные точки как узловые точки, которые не позволяют использовать соседние точки данных в конечных точках в виде узлов?
Спасибо! Очень полезно. Мне любопытно, однако, почему при переходе от B-сплайнов к кубическим многочленам он сохраняет повторяющиеся узловые точки? Когда я беру вывод из приведенного выше кода и делаю: 'poly = scipy.interpolate.PPoly.from_spline (spl_tck)' out out in 'poly.x' имеет повторяющиеся точки. Это для меня кажется глупым, поскольку узлы в кубическом сплайне являются точками, между которыми действуют коэффициенты, поэтому повторение ничего не делает. Просто результат отправки не-узла B-сплайна в кубический сплайн-конвертер ?? – Paul
Ну, я думаю, это просто, что в плавающей точке не очень четко определено равенство, поэтому попытка обнаружить, что сплайн-узлы совпадают, на самом деле не стоит того. Вы можете взглянуть на источник «PPoly.from_spline», это действительно пять строк. –
Я должен добавить, что будущая версия scipy, вероятно, будет иметь интерполирующий сплайн-объект в полиномиальном базисе. См. Https://github.com/scipy/scipy/pull/5653 –