Запонадобилась мне простая кубическая интерполяция. Нагуглил случайно исходник интерполяционной программки, которая что-то делает внутри UFRaw, вырезал из неё три вычисляющих функции, всё работает.
Работает так: есть формулы для определения коэффициентов полинома через значения узлов, значения интерполируемой функции в узлах и вторых производных в этих узлах, при чём формулы требуют непрерывность второй производной (коэффициент d при третьей степени привязан к разности вторых производных в соседних узлах).
Перед использованием полинома вызывается spline_cubic_set, в ней вычисляются вторые производные в узлах с использованием предположения о том, что первая производная тоже непрерывна, и потом можно вызывать spline_cubic_val, которая вычисляет значения в точках и производные заодно.
В комментариях к исходникам есть все эти формулы.
Программа:
http://pastebin.com/He7VWjhEHeader nikon-curve.h:
http://pastebin.com/UX6deTKz (если будут неопределённые символы, качните его).
Компилируется по меньшей мере в VC2010 Express, должно и в других прогах компилироваться.
И теперь
вопрос: как так получается, что вторые производные в узлах при требовании к непрерывности первой и второй производной определяются однозначно? Почему это требование оказывается достаточным для точного определения вторых производных?
Вопрос звучит странно, конечно. Если можете, покажите эту закономерность.