У меня есть некоторые точки данных, которые я хотел бы аппроксимировать кубическим b-сплайном. В другой программе мне нравится интерполировать некоторые точки, используя только подобранные узлы и коэффициенты. Это означает, что мне нужно написать код для оценки точки с учетом узлов и коэффициентов. Используя эту вики-страницу, я уже смог правильно оценить различные точки с результатом
knots,coeff,n=scipy.interpolate.splrep(x,y)
Как ни странно, мне нужно было удалить первую и последнюю 3 записи в массивах, чтобы заставить код работать (примечание: первые 4 и последние 4 записи узлов одинаковы и поэтому будут давать ошибку деления на 0). Кто-нибудь знает, почему есть эти дублированные записи? Помимо удаления этих записей, уравнение со страницы вики работает. Из результата
knots=[ 15., 15., 15., 15., 75., 105., ..., 2895., 2925., 2985., 2985., 2985., 2985.]
coeffs=[ 1.87979615, 1.54132042, 1.46751212, 1.31223359, 1.34208367, 1.2181689, ..., 0.99327417,0.5866527, 0., 0., 0., 0. ]
Я получаю хорошее приближение точек данных.
Однако, когда я также хочу использовать веса, я заметил, что массивы "knots" и "coeff" выглядят очень странно. Кто знает, как мне нужно интерпретировать результат функции подгонки сплайна? В настоящее время я получаю
knots=[15.,15.,15.,15.,2985.,2985.,2985.,2985.]
coeff=[ 1.48725714,0.3513811,0.71970619,0.66119226,0.,0.,0.,0. ]
Или это все же ошибка?
В идеале мне нравится иметь код (C/C++, python), который оценивает различные точки с учетом узлов и коэффициентов функции.