Алгоритм сглаживания сплайнов в C - PullRequest
3 голосов
/ 22 февраля 2011

Я работаю в области инжиниринга на промышленном предприятии, для некоторых наших онлайн-моделей мы смотрим на высокочастотные выходные данные термопар, датчиков и т. Д. По своей природе эти данные подвержены эффекту «шума», что делает живой анализ такого времени. данные серии сложно.

Мы используем статистический пакет SAS для автономного анализа, который включает в себя собственные процедуры сглаживания. Процедуры сглаживания SAS основаны на статье Кристиана Рейнша 1967 года, доступной здесь: http://www.cise.ufl.edu/class/cap5416fa10/resources/Reinsch_1967.pdf

В качестве подтверждения концепции я смог переписать код Reinsch Algol 60 на C (C - это язык программирования, с которым я больше всего знаком, а также язык, на котором написано наше программное обеспечение для управления установкой), и доволен выводом I ' я тестирую мой код с примерами наборов данных.

Мне бы хотелось, чтобы эта функциональность была добавлена ​​в нашу диспетчерскую, у нас есть специально написанные трендовые пакеты и т. Д., Где эта функциональность крайне желательна. Я обеспокоен производительностью алгоритма, особенно для больших наборов данных, я искал уже существующие алгоритмы сглаживания сплайнов в C, но, похоже, выбора не так много.

У меня есть достаточно популярный учебник «Числовые рецепты в C», в котором есть собственная реализация кубической сплайн-интерполяции, но он оказался неподходящим из-за использования пользовательских заголовков и переназначения признаков массива, использования пользовательских «векторов». и т.д., научная библиотека GNU (GSL) также делает подобное.

В идеале я бы хотел как можно меньше полагаться на внешние библиотеки, поскольку людям становится неловко от дополнительных зависимостей в нашей производственной среде. Существуют ли какие-либо алгоритмы на «простом» C? Я должен добавить, что мой опыт работы в области инженерии, а не информатики, поэтому любой код, который я пишу сам, вероятно, будет менее эффективным, чем существующие реализации.

1 Ответ

0 голосов
/ 22 февраля 2011

Это может быть полезно, но похоже, что ваш код на C, адаптированный из оригинального Algol, может быть достаточно хорош.Мне кажется маловероятным, что ваш код станет серьезным узким местом в производительности.

http://www.pcs.cnu.edu/~bbradie/cinterpolation.html

(Изменить: это фактически относится к сохраненной копии archive.org)

...