如何将 ceres::CubicInterpolator 与不在统一网格上的数据一起使用

How do I use ceres::CubicInterpolator with data not on a uniform grid

Ceres 求解器允许使用分段立方 Hermite 插值进行插值,我正在尝试使用它来为 Eigen 创建立方插值。

This snippet from ceres/examples 展示了如何设置插值器。调整它为我的用例提供一个玩具示例:

const int kNumSamples = 4;
double x[kNumSamples];
x[0] = 12.5; x[1] = 13.9; x[2] = 14.0; x[3] = 21.4;

double values[kNumSamples];
for (int i = 0; i < kNumSamples; ++i) {
    values[i] = (x[i] - 4.5) * (x[i]- 4.5);
}

Grid1D<double> array(values, 0, kNumSamples);
CubicInterpolator<Grid1D<double> > interpolator(array);

我相信可以在给定数据点之间的位置进行评估,例如:

double x_interp = 1.5;
double y_interp;
double dydx_interp;
double yi = interpolator_.Evaluate(x_interp, &y_interp, &dydx_interp);

但是 Grid1D 对象对 x 值是什么没有概念。它始终假定数据位于规则网格上,从某个索引(在本例中为 0)开始并包含 kNumSamples(在本例中为 4)个样本。

问题

如何让 Grid1D 知道实际输入的 x 位置?或者,我应该对我的 x_interp 值进行什么映射才能得到正确的答案?

感谢您的帮助!

CubicInterpolator 无法处理非均匀分布的数据。你将不得不自己使用诸如三次样条之类的东西来做到这一点。