如何使用boost::catmull_rom实现不规则时间序列插值?
Boost Catmull-Rom插值器的使用困惑与需求说明
我需要为间隔不规则的采样时间序列实现Catmull-Rom插值,注意到Boost插值库提供了boost::catmull_rom,但未找到对应2D插值的示例代码,因此自行编写了测试代码:
#include <boost/math/interpolators/catmull_rom.hpp> ... std::vector<std::array<double, 2>> points(4); points[0] = { 0, 0 }; points[1] = { 1, 3 }; points[2] = { 3, -3 }; points[3] = { 7, 4 }; boost::math::catmull_rom<std::array<double, 2>> cr(std::move(points)); auto max_s = cr.max_parameter(); auto val = cr(2);
我期望每个points数组的第一个元素为采样时间(X轴),第二个为对应数值(Y轴),代码可编译运行,但无法解读输出:
- 不清楚
max_parameter()返回值7.133的含义 cr(2)返回的数组[1.146,2.870]不符合我预期的X=2时的Y值(预期约为0)
我不理解该类的工作原理与使用方法,希望有人告知正确用法、输出解读,或说明其是否无法满足我的需求。
针对此前评论的回复:
- Pepijn:我的问题是关于如何实际使用Boost库的Catmull-Rom插值器,并非期望其输出具有线性特性。
- Ahmed:我尝试了Boost的Barycentric_rational插值器,绘制结果后发现后期出现异常振荡,推测是X数据间隔变化导致,该插值器不适用。对比使用Boost Makima(改进型Akima)插值器的结果,更符合预期,现在希望尝试Catmull-Rom插值器做对比。
内容的提问来源于stack exchange,提问作者Bill Heitler
相关产品推荐
相关产品推荐

