gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:15:17 24 4
gpt4 key购买 nike

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 无法处理非均匀分布的数据。您将不得不自己使用三次样条之类的东西来做到这一点。

关于c++ - 如何将 ceres::CubicInterpolator 与不在统一网格上的数据一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56789920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com