【发布时间】:2014-12-09 17:20:54
【问题描述】:
我收到一个带有以下代码的“gsl: interp.c:150: ERROR: interpolation error”。一些谷歌搜索说,当您尝试使用 interp 函数进行推断时会发生此错误,但我看不出这里是如何发生的。帮助将不胜感激。谢谢。
函数randomground() 只是返回一个随机数(双精度)。
#define NSTEPS 100
int main()
{
int j, q, space = 1, refine = 100;
double xi = 0.0, tx[2*NSTEPS] = {0}, theight[2*NSTEPS] = {0};
double terrain[(int) (2*NSTEPS*100)] = {0};
double terrainsl[(int) (2*NSTEPS*100)] = {0};
for (j = 0; j < 2*NSTEPS; j++)
{
tx[j] = (double) j*space;
theight[j] = randomground();
}
gsl_interp_accel *acc = gsl_interp_accel_alloc();
gsl_spline *spline = gsl_spline_alloc(gsl_interp_akima, 2*NSTEPS);
gsl_spline_init(spline, tx, theight, 2*NSTEPS);
for (q = 0; q< 2*NSTEPS*100; q++)
{
terrain[q] = gsl_spline_eval(spline,xi,acc);
terrainsl[q] = gsl_spline_eval_deriv(spline,xi,acc);
xi = xi+(double) space/refine;
}
return 0;
}
【问题讨论】:
-
我应该补充一点,当我在我的 Windows 机器上运行它时没有错误,但是当我在实验室的 Linux 服务器上运行它时,我得到了 interp 错误
-
浮点精度错误可能是问题所在。向 tx 的第一个和最后一个元素添加一个小偏移以增加范围。这不会影响您的最终结果,因为您的计算所需的精度可能远低于双精度。
-
@ViniciusMiranda,抱歉,我不明白您所说的“在 tx 的第一个和最后一个元素中添加一个小偏移”是什么意思
标签: c interpolation gsl