切比雪夫逼近

    本章描述计算单变量函数切比雪夫逼近的函数。切比雪夫逼近是级数f(x)=cnTn(x)的截断,其中切比雪夫多项式Tn(x)=cos(n arccosx)提供了多项式在区间[−1,1]上的正交基,权函数为1/1-x2。前几个切比雪夫多项式是,T0(x) = 1, T1(x) = x, T2(x) = 2x2−1。更多信息,请参阅第22章Abramowitz和Stegun。

    本章描述的函数声明在头文件gsl_chebyshev.h中。

32.1 定义

gsl_cheb_series

    切比雪夫级数的存储结构如下:

typedef struct 
{ 
double * c;          /* coefficients c[0] .. c[order] */ 
int order;            /* order of expansion */ 
double a;           /* lower interval point */ 
double b;           /* upper interval point */ 
... 
} gsl_cheb_series

    在[a, b]范围内用order+ 1项进行逼近,包括系数c[0]。级数是用下面的定义计算的,

python 切比雪夫拟合 切比雪夫权函数_多项式

这是直接访问系数时需要的。

32.2 创建和计算切比雪夫级数

gsl_cheb_series * gsl_cheb_alloc(const size_t n)

    本函数为一个n阶的切比雪夫级数分配空间,并返回一个指针,指向新建的gsl_cheb_series结构体。

void gsl_cheb_free(gsl_cheb_series * cs)

    本函数释放分配的切比雪夫级数cs的空间。

int gsl_cheb_init(gsl_cheb_series * cs, const gsl_function * f, const double a,

const double b)

    本函数计算函数f在范围(a, b)上的切比雪夫逼近cs到先前指定的阶。切比雪夫逼近的计算是一个O(n2)过程,需要n个函数的计算。

32.3 辅助函数

    以下函数提供了关于现有的切比雪夫级数的信息。

size_t gsl_cheb_order(const gsl_cheb_series * cs)

    本函数返回切比雪夫级数cs的级。

size_t gsl_cheb_size(const gsl_cheb_series * cs)

double * gsl_cheb_coeffs(const gsl_cheb_series * cs)

    这些函数返回切比雪夫系数数组c[]的大小和切比雪夫级数cs在内存中的位置的指针。

32.4 切比雪夫级数计算

double gsl_cheb_eval(const gsl_cheb_series * cs, double x)

    本函数计算在给定点x处的切比雪夫级数cs的值。

int gsl_cheb_eval_err(const gsl_cheb_series * cs, const double x, double * result,

double * abserr)

    本函数计算给定点x处的切比雪夫级数cs,估算级数值在result中,其绝对误差在abserr中。误差估计是根据级数中忽略的第一项进行的。

double gsl_cheb_eval_n(const gsl_cheb_series * cs, size_t order, double x)

    本函数计算在给定点x处的切比雪夫级数cs,直到(至多)给定的级order。

int gsl_cheb_eval_n_err(const gsl_cheb_series * cs, const size_t order,

const double x, double * result, double * abserr)

    本函数计算给定点x处的切比雪夫级数cs,估算级数值在result中,其绝对误差在abserr中,(至多)达到给定的级order。误差估计是根据级数中忽略的第一项进行的。

32.5 微分和积分

下面的函数允许对切比雪夫级数进行微分或积分,得到一个新的切比雪夫级数。请注意,由于忽略了高次项的贡献,对导数级数的估计误差将被低估。

int gsl_cheb_calc_deriv(gsl_cheb_series * deriv, const gsl_cheb_series * cs)

    本函数计算级数cs的导数,将导数系数存储在先前分配的deriv中。两个级数cs和deriv必须按相同的顺序分配内存。

int gsl_cheb_calc_integ(gsl_cheb_series * integ, const gsl_cheb_series * cs)

    本函数计算级数cs的积分,将积分系数存储在先前分配的integ中。两个级数cs和integ必须按相同的顺序分配内存。积分的下限为取值范围a的左端。