Алгоритм интерполяции c ++ Эрмита в Boost

Я пытаюсь использовать библиотеку Boost c ++ для интерполяции Эрмита, но она плохо документирована, и я не совсем понимаю.

Мой случай состоит в том, чтобы вычислить значения y в некоторой позиции x из точек данных, таких как:

X: 0.9, 1.7, 2.55, 3.39...
Y: 0.9, 0.8, 0.85, 0.84...

И получить результат с равными x пробелами (x space 0.5):

X: 0.5, 1.00, 1.5, 2.00, 2.5, 3.0,...
Y: 0.8, 0.95, 0.8, 0.85, 0.9, 0.9,...

Может ли повышение быть полезным для меня? Я нашел больше реализаций Hermite в сети, но примеры и вывод результатов были не тем, что я искал. Я думаю, это потому, что я не понимаю, как это работает. Когда я читал про Эрмита, я подумал, что алгоритм должен запрашивать некоторые точки, интервальные значения и, возможно, несколько других входных значений, а затем вычислять и возвращать новые точки, но я ошибся и теперь потерял ..

http://www.boost.org/doc/libs/1_47_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_poly/hermite.html

Может быть, у кого-то есть опыт использования Hermite и был похожий случай?

1

Решение

Ну, во-первых, Эрмит был плодовитым математиком, так Эрмитовых полиномов (ортогональное семейство) не связаны с интерполяционными полиномами Эрмита, которые возникают в метод интерполяции.

Во-вторых, интерполяция Эрмита применяется, когда у вас есть значения первых нескольких производных функций, а также значений функций в каждой точке, поэтому она не очень применима в вашем случае.

В частности, в Boost я мог найти только этот алгоритм для неравномерной интерполяции: http://www.boost.org/doc/libs/1_65_0/libs/math/doc/html/math_toolkit/interpolate/barycentric.html — надеюсь, это достаточно хорошо для ваших целей.

1

Другие решения

Повышение обеспечивает барицентрическая рациональная интерполяция для неравномерной интервальной интерполяции. Это изменение появилось в 1.65, так что оно довольно новое, и вам, возможно, придется обновить ваш буст. Если вам нужен равномерный интервал и производные, оцените эти интерполированные и равные интервалы точек и используйте cubic_b_spline интерполяция.

0

По вопросам рекламы [email protected]