Кубическая интерполяция с неэквидистантными точками

Я пытаюсь создать интерполяцию списка точек.

У меня есть некоторая точка координат (ti, xi), где ti - отметка времени, а xi - связанные значения. Я хочу создать функцию, которая проходит через эти точки и позволяет мне найти значение x, соответствующее обобщенному t, которое лежит в интервале.

Я хочу интерполировать их с интерполяцией третьего порядка. Я видел что-то вроде интерполяции Катмулла, но это работает, только если точки xi равноудалены.

Например, здесь http://www.mvps.org/directx/articles/catmull/ вы можете обнаружить, что отметки времени равноудалены, как и здесь http://www.cs.cmu.edu/~462/projects/assn2/assn2/catmullRom.pdf.

Есть ли способ применить кубическую интерполяцию с нерегулярными точками?

2 ответа

Неравный интервал между аргументами не является проблемой, если они все различны. Как вы, наверное, знаете, если у вас есть четыре раза t[i], тогда существует единственный полиномиальный интерполант соответствующих значений x[i] имеющий степень не более 3 (кубический или более низкий порядок).

Существует два основных подхода к вычислению интерполяции : разделенные разности Ньютона и метод интерполяции Лагранжа.

Помня о том, что просто найти полином не имеет смысла, а оценивать его в другое время интервала, есть некоторые программные компромиссы, которые следует учитывать.

Если времена t[i] фиксированы, но значения x[i] меняются неоднократно, вы можете быть хорошо, используя метод Лагранжа. Он в основном строит четыре кубических полинома, которые укореняются в трех из четырех точек и дает нормализованное значение 1 в оставшейся точке. Когда у вас есть эти четыре полинома, интерполируя значения x[i] это просто вопрос принятия соответствующей линейной комбинации из них. Метод Лагранжа страдает от феномена Рунге на краях интервала.

Однако, если времена t[i] продолжайте меняться, или, возможно, вы оцениваете интерполяционный полином для ряда промежуточных точек для одного и того же t[i], x[i] данные, то разделенные различия Ньютона могут быть лучше. Если важна точность, можно изменить порядок t[i] появляются в таблице разделенных разностей, так что оценка локализуется в ближайшее время к промежуточному времени, когда требуется значение.

Нетрудно найти пример кода для метода разделенных разностей Ньютона в Интернете, например, на C++, Python или Java.

Одним из способов может быть наложение наименьших квадратов через точки. Я нашел такой подход здесь надежным и практичным, даже с небольшим количеством пунктов.

Другие вопросы по тегам