GSL中的插值 您所在的位置:网站首页 Akima插值是三次样条 GSL中的插值

GSL中的插值

2023-12-09 19:51| 来源: 网络整理| 查看: 265

插值

    本章描述的是进行插值的函数。本库提供了各种插值方法,包括Cubic、Akima和Steffen样条。插补类型是可互换的,不需要重新编译就可以使用不同的方法。插值可以定义为正规边界条件和周期边界条件。附加函数可用于计算插值函数的导数和积分。例程提供了插值一维和二维数据集。

这些插值方法产生通过每个数据点的曲线。用平滑曲线插值噪声数据参见基样条。

本节中描述的函数声明在头文件gsl_interp.h和gsl_spline.h中。

30.1 一维插值介绍

    给定一组数据点(x1, y1)…(xn, yn),本节描述的例程计算一个连续插值函数y(x),使y(xi) = yi。插补是分段光滑的,它在端点的行为取决于所使用的插补的类型。

30.2 一维插值函数

    给定数据集的插值函数存储在gsl_interp对象中。是由以下函数创建的。

gsl_interp

    一维差值的工作空间。

gsl_interp * gsl_interp_alloc(const gsl_interp_type * T, size_t size)

    本函数返回一个指针,指向一个新分配的类型为T的,size大小的数据点的插值对象。

int gsl_interp_init(gsl_interp * interp, const double xa[], const double ya[],

size_t size)

    本函数初始化数据(xa, ya)的插值对象interp,其中xa和ya是大小为size的数组。插值对象(gsl_interp)不保存数据数组xa和ya,只存储从数据计算出的静态状态。xa数据数组总是假定是严格有序的,且x值不断增加;没有定义其他约定的行为。

void gsl_interp_free(gsl_interp * interp)

    本函数释放了差值对象interp。

30.3 一维插值类型

    插值库提供以下插值类型:

gsl_interp_type

   

    gsl_interp_linear

线性插值,这种插值方法不需要任何额外的内存。

gsl_interp_polynomial

多项式插值,这种方法只用于插值少量的点,因为多项式插值对较好的数据集也引入了大振荡。插值多项式的项数等于点数。

gsl_interp_cspline

具有自然边界条件的三次样条,得到的曲线在每个区间上是分段三次的,在提供的数据点上具有匹配的一阶导数和二阶导数。二阶导数在第一个点和最后一个点都为零。

gsl_interp_cspline_periodic

具有周期边界条件的三次样条,得到的曲线在每个区间上是分段三次的,在提供的数据点上具有匹配的一阶导数和二阶导数。第一个点和最后一个点的导数也是匹配的。注意,数据中的最后一个点必须与第一个点具有相同的y值,否则生成的周期性插值将在边界处具有不连续。

    gsl_interp_akima

具有自然边界条件的非圆形Akima样条,本方法采用了Wodicka的非圆角算法。

    gsl_interp_akima_periodic

    具有周期边界条件的非圆形Akima样条,本方法采用了Wodicka的非圆角算法。

gsl_interp_steffen

Steffen方法保证了给定数据点间插值函数的单调性。因此,极小值和极大值只能准确地出现在数据点上,并且数据点之间不可能存在虚假的振荡。插值函数在每个区间上是分段三次的。得到的曲线及其一阶导数保证是连续的,但二阶导数可能是不连续的。

相关函数如下:

    const char * gsl_interp_name(const gsl_interp * interp)

        本函数返回interp使用的插值类型的名称。例如:

printf ("interp uses '%s' interpolation.\n", gsl_interp_name (interp));

将打印类似如下内容,

interp uses 'cspline' interpolation.

unsigned int gsl_interp_min_size(const gsl_interp * interp)

unsigned int gsl_interp_type_min_size(const gsl_interp_type * T)

    这些函数返回插补对象interp或插值类型T所需的最小点数。例如,Akima样条插值最少需要5个点。

30.4 一维索引查找和加速

    搜索的状态存储在gsl_interp_accel对象中,它是一种用于插值查找的迭代器。

gsl_interp_accel

本工作空间存储用于插值查找的状态变量。它缓存索引查找之前的值。当后续插值点落在同一区间时,可以立即返回其索引值。

size_t gsl_interp_bsearch(const double x_array[], double x, size_t index_lo,

size_t index_hi)

本函数返回数组x_array的索引i,使x_array[i]



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有