Как использовать Boost :: Catmull_rom для интерполяции временных рядов?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как использовать Boost :: Catmull_rom для интерполяции временных рядов?

Сообщение Anonymous »

Я хочу реализовать интерполяцию Catmull-Rom для временного ряда данных, отобранных с нерегулярными интервалами. Я заметил, что Boost предоставляет Catmull_rom в своей библиотеке интерполяции, и я попытался использовать это. Я не смог найти какого -либо образца кода для простой 2D -интерполяции той, которую я хочу, поэтому экспериментировал. Мой начальный (тестовый) код: < /p>

Код: Выделить всё

#include 
...
std::vector points(4);
points[0] = { 0, 0 };
points[1] = { 1, 3 };
points[2] = { 3, -3 };
points[3] = { 7, 4 };
boost::math::catmull_rom cr(std::move(points));
auto max_s = cr.max_parameter();
auto val = cr(2);
Мое намерение заключалось в том, что первым элементом в каждом точках массив является время, когда измеряли образец, а вторым является значение в то время (то есть простой формат XY). Это компилизируется и работает ОК, но я не знаю, как интерпретировать выход. Я бы надеялся получить единственное значение для y при x = 2, которое должно быть приблизительно 0 (как интерполяция на полпути между значениями y 3 и -3). < /P>
Очевидно, что я не понимаю, как работает этот класс, и как его использовать. Хотите? Я не ожидаю линейного поведения от его вывода.

ahmed: я попробовал интерполятор Boost barycentric_rational, используя пример из документации Boost (набор данных Walter Kohn). Когда я планирую полученные интерполированные данные, это выглядит следующим образом:



Средние части ранней части изгиба выглядят хорошо, но на более поздние оска. Я предполагаю, что изменение в расстоянии между данными X является причиной проблемы, но это означает, что этот интерполятор не подходит для моей цели.

Для сравнения я наложил те же данные, используя код библиотеки Boost Makima (Modified Akima), и он выглядит так:



это, безусловно, больше, чем я ожидаю от интерполятора. Теперь я хотел бы попробовать интерполятор Catmull-Rom для сравнения.

Подробнее здесь: https://stackoverflow.com/questions/796 ... erpolation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»