如何使用CERES :: Cupicinterpolator与不在均匀网格上的数据

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

本文关键字:网格 数据 CERES 何使用 Cupicinterpolator      更新时间:2023-10-16

CERES求解器允许使用分段的Cubic Hermite Interpolant插值,我正在尝试使用它为特征创建一个立方体插入。

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无法处理不均匀分布的数据。您将必须自己使用类似立方样条的东西才能做到这一点。