代码之家  ›  专栏  ›  技术社区  ›  jmd_dk

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

  •  0
  • jmd_dk  · 技术社区  · 6 年前

    我做了很多三次样条插值 GSL . 假设我有三个自变量 a , b c 在同一个物理数据点(可以是以米、英尺和英里为单位测量的同一组位置)以及两个因变量上列出。 y z 在同一点上制成表格。也就是说,函数的数据 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);
    

    哪里 size 是的大小 Y 数组(所有六个数组的大小相同)。

    我的问题是:对于每个样条曲线,我真的需要一个单独的加速器吗?这样做更快吗?在多个样条曲线上共享加速器是否更安全?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kaveh Vahedipour    6 年前

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