GSL:在样条线之间共享加速器

时间:2018-05-22 13:33:13

标签: c interpolation spline gsl cubic-spline

我正在使用GSL进行大量的三次样条插值。假设我有三个独立变量abc,所有变量都列在相同的物理数据点(可能是以米,英尺和英里为单位测量的同一组位置),以及两个因变量yz,列在同一点。也就是说,函数y(a)y(b)y(c)z(a)z(b)z(c)的数据已制成表格。我现在为这些函数制作6个三次样条函数,如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数组的大小(所有六个数组的大小相同)。

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

1 个答案:

答案 0 :(得分:1)

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