Тогда попробуйте так: вводите в рассмотрение некий параметр, определяющий, относить ли две последовательные точки к одному сплайну. Таким образом, делите все множество точек на группы.
Дальше три способа:
1. Совсем грубый. Строите кубический сплайн (как я писал раньше), учитывая только граничные точки в каждом множестве.
2. Грубый. Ясно, что если функция то возрастает, то убывает, то сплайн испортит это поведение. Надо разбивать точки на группы ещё с учетом сохранения монотонности. Т.е. в каждой группе только близкие точки, где функция либо возрастает, либо убывает. А дальше, как в первом варианте.
3. Нормальный. Оказывается, что и в этом случае могут появиться посторонние пики. Так что вместо обычного сплайна надо использовать монотонный.
http://en.wikipedia.org/wiki/Monotone_cubic_interpolation