0

我正在使用GSL进行很多三次样条插值。假设我有三个自变量和a,它们都在相同的物理数据点上制表(它可能是以米、英尺和英里为单位测量的同一组位置),以及两个因变量和,都在相同的点上制表。也就是说,函数、 、 、和的数据被制成表格。我现在为这些函数制作 6 个三次样条,如下所示的样条:bcyzy(a)y(b)y(c)z(a)z(b)z(c)y(a)

gsl_interp_accel *acc = gsl_interp_accel_alloc();
gsl_spline *spline = gsl_spline_alloc(gsl_interp_cspline, size);
gsl_spline_init(spline, a, y, size);

其中sizeay数组的大小(所有六个数组的大小相同)。

我的问题:我真的需要为每个样条曲线单独的加速器吗?这种方式是否更快,跨多个样条线共享加速器是否安全?

4

1 回答 1

1

是的,每个样条线都需要一个加速器,对您来说,多个样条线之间的同一个加速器对您来说是绝对安全的。正如您自己已经猜到的那样,我假设加速器是一种预处理,在最好的情况下会减慢给定混合输入的插值。
如果您关心创建加速器并经常释放它们的性能方面,只需保留加速器并在每次使用后重置它们。
取决于二进制文件的大小和其他影响内存查找的因素,性能的巨大提升是-DHAVE_INLINE=1在编译期间的使用。它将gsl_interp_accel_find从标头内联,而不是使用libgsl.

于 2018-05-24T07:52:56.363 回答