У меня возникли проблемы с использованием методов интерполяции scipy, чтобы получить хорошую плавную кривую из заданных точек данных. Я попытался использовать стандартную 1D-интерполяцию, RBF-интерполяцию со всеми параметрами (кубическая, гауссова, многоквадратичная и т. Д.)
на предоставленном изображении, синяя линия - исходные данные, и я собираюсь сначала сгладить острые края, а затем иметь динамически редактируемые точки, из которых можно пересчитать кривую. Каждый раз, когда редактируется отдельная точка, она должна автоматически вычислять новый сплайн некоторого вида для плавного перехода между каждой точкой.
Это работает, когда точки находятся в определенном диапазоне друг от друга, как показано ниже.
Но если точки оказываются слишком далеко друг от друга или слишком близко друг к другу, я сталкиваюсь с такими проблемами, как следующие.
Ключевые моменты:
- Кривая ДОЛЖНА быть плоской между первыми двумя точками
- Кривая НЕ должна опускаться ниже точки 1 или 2 (т.е. производная не может быть отрицательной)
- ~ 15 точек (не показаны) между точками 2 и 3 также доступны для редактирования, и линия между ними не обязательно является линейной. Полный контроль над каждой из этих точек является обязательным, так как кривая проходит через каждую из них.
Я рад разбить его на более мелкие кривые, которые я затем соединяю / сворачиваю, но мне просто нужно обеспечить градиент> 0.
пример данных:
x=[0, 37, 50, 105, 115,120]
y=[0.00965, 0.00965, 0.047850827205882, 0.35600416666667, 0.38074375, 0.38074375]
В качестве примера попробуйте переместить точку 2 (x=37
) в крайнее значение, скажем, 10 (оставьте у прежним). Просто убедитесь, что все точки от x=0
до x=10
(или любого другого варианта) имеют одинаковые значения y 0.00965
.
любая помощь очень ценится.
UPDATE
Попытка pchip метода предложена в комментариях с результатами ниже:
метод Пчипа, все лучше и хуже ...