Пусть у нас имеется набор точек
на равномерной сетке
. Для каждого интервала между узлами сетки требуется построить полином, проходящий через
ближайших к этому интервалу узла. Этот полином единственный, но его коэффициенты зависят от того, что мы возьмем в качестве аргумента полинома. Если мы масштабируем период дискретизации к единице, то можем свести задачу к нахождению полинома от
, проходящего через произвольные значения
при
. В классическом интерполяторе Фарроу третьего порядка выбрано именно такое масштабирование аргумента, поскольку это позволяет добиться уменьшения количества операций для расчета его коэффициентов, что впрочем не помешало еще оптимизировать алгоритм расчета при таком масштабировании (см. код в постах выше). Если применить другое масштабирование аргумента, например в диапазон
, то получатся другие формулы для коэффициентов и сами коэффициенты, что не помешает полиному остаться тем же самым (просто от другого аргумента), и также оптимизировать расчет коэффициентов для такого масштабирования.
Теперь о моем алгоритме. Рассмотрим задачу построения кусочно-полиномиальной функции (специально для ревнителей термина
сплайн) на равномерной сетке по следующим условиям: на каждом интервале функция должна проходить через точки-края интервала
, а также иметь в этих краях вторые производные, совпадающие со вторыми производными, рассчитанными по параболам с центром в этих точках: то есть, для
- по параболе, построенной по значениям в точках
, а для точки
- соответственно в точках
. Несложно проверить (хотя и забавно узнать), что полином третьей степени, построенный по таким условиям, полностью совпадает с полиномом Лагранжа, проходящем через точки
. И это позволяет нам оптимизировать решение задачи построения полинома по четырем точкам следующим образом: при рассмотрении исходной задачи каждый следующий интервал из
точек содержал
точки из предыдущего интервала, но этим фактом напрямую нельзя было воспользоваться, потому что сама постановка задачи не предполагает каких-то явно выделенных конструкций, которые мы можем рассчитать для предыдущего интервала и применить к следующему. В альтернативной постановке у нас появляется явно подобная конструкция - вторая производная, рассчитанная в правой границе текущего интервала может быть использована в том же значении и качестве для левой границы следующего интервала и ее не надо рассчитывать заново. Плюс можно найти еще одну конструкцию, которую также можно рассчитать единожды, а использовать для обоих интервалов. На этом, собственно, и основан мой результат, оптимизирующий численный расчет исходной задачи. Если нужно, могу написать явные формулы, но они тривиальны и могут быть получены самостоятельно любым заинтересовавшимся.