Кубическая интерполяция с неэквидистантными точками
Я пытаюсь создать интерполяцию списка точек.
У меня есть некоторая точка координат (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.
Одним из способов может быть наложение наименьших квадратов через точки. Я нашел такой подход здесь надежным и практичным, даже с небольшим количеством пунктов.