У меня есть данные, которые берутся в разное время и немного в разных местах, поэтому высокие и низкие точки образуют «канал».Я пытаюсь найти среднюю линию этих точек, так что в основном то, что находится в середине "канала"
Используя простое полиномиальное соответствие 5-го порядка (numpy.polyfit(x,y,5)
), я получаю следующий результат, гдеаппроксимация идет прямо по середине «канала», образованного двумя точками данных (поэтому красная линия попала в середину синих точек. ![Polyfit attempt](https://i.stack.imgur.com/69XmR.png)
Единственное единственноепроблема в том, что я исключаю довольно важную точку данных из этой подгонки поли, поскольку она все портит (это поток жидкости в трубе с радиусом = 1. Я исключаю точку скольжения ,что было бы (1,0)
, и действительно испортило бы подгонку).
Чтобы попытаться отсортировать это, я попытался использовать сплайн-подгонку (scipy.interpolate.splrep
). Однако, поиграв с этим некоторое время,кажется, что он заботится только о верхних значениях «канала» вплоть до x = 0,8: ![spline fit 1](https://i.stack.imgur.com/163up.png)
^ Это без каких-либо изменений настроек (поэтому просто splrep(x,y)
)![spline fit 2](https://i.stack.imgur.com/oIdjI.png)
^ Здесь указываются некоторые узлы (splrep(x,y,t=knots
) ![spline fit 3](https://i.stack.imgur.com/XbXTc.png)
^ Это указывает на гладкость (splrep(x,y,s=5)
)
Добавление «точки скольжения» к данным дает желаемый эффект (т.е.сопоставьте данные о высокой скорости так же, но все еще сопоставьте пограничный слой со стеной), но у нас все еще есть другие проблемы: ![spline fit with no-slip point](https://i.stack.imgur.com/Z8gRA.png)
Это нормальное поведение для сплайнафункция представления?Как мне сделать так, чтобы это учитывало данные как верхней, так и нижней точек?
Примечание: «Точки файла» на рисунках - это просто сплайн, оцениваемый в определенных точках.Не стесняйтесь игнорировать это.