Мне нужно сопоставить данные довольно косвенным образом. Исходные данные, подлежащие восстановлению при подгонке, представляют собой некоторую линейную функцию с небольшими колебаниями и дрейфами на ней, которые я хотел бы идентифицировать. Назовем это f (t). Мы не можем записать этот параметр в эксперименте напрямую, а только косвенно, скажем, как g (f) = sin (a f (t)). (Реальная функция передачи более сложна, но она не должна играть здесь роли)
Итак, если f (t) меняет направление в сторону поворотных точек функции sin, это трудно идентифицировать, и я попробовал альтернативный подход для восстановления f (t), чем просто обратная функция g и некоторые предположения, продолжающие данные:
Я создаю модельную функцию fm (t), которая претерпевает ту же известную передаточную функцию g () и подгоняет g (fm (t)) к данным. Поскольку набор данных огромен, я делаю это по частям для последовательных порций данных, гарантируя непрерывность fm по всему набору.
Первой попыткой было использовать линейные функции с помощью optimize.leastsq, где оценка ошибки выводится из g (fm). Это не совсем удовлетворительно, и я думаю, что было бы гораздо лучше подогнать сплайн к данным, чтобы получить fspline (t) в качестве модели для f (t), гарантирующей непрерывность данных и их производной.
Проблема в том, что подгонка сплайна из пакета интерполяции работает с данными напрямую, поэтому я не могу обернуть сплайн с помощью g (fspline) и выполнить интерполяцию сплайна на этом. Есть ли способ сделать это в scipy?
Есть другие идеи?
Я пробовал квадратичные функции и исправлял смещение и наклон так, чтобы они соответствовали параметрам предыдущего подогнанного блока данных, поэтому есть только один подгоночный параметр, кривизна, которая очень быстро начинает отклоняться.
Спасибо