多项式
本章描述了求多项式值和解多项式的函数。这些例程使用分析方法,来求解二次和三次方程的实数和复数根。迭代多项式求解器也可用于求具有实系数(任意阶)的一般多项式的根。函数都声明在头文件gsl_poly.h中。
6.1 多项式求值
这里描述的函数求如下多项式的值
P(x) = c[0] + c[1]x + c[2]x2 +···+ c[len−1]xlen−1
使用霍纳方法保证稳定性。当定义了HAVE_INLINE时,将使用这些函数的内联版本。
double gsl_poly_eval(const double c[], const int len, const double x)
本函数求实变量x的实系数多项式。
gsl_complex gsl_poly_complex_eval(const double c[], const int len,
const gsl_complex z)
本函数对复变量z求实系数多项式。
int gsl_poly_eval_derivs(const double c[], const size_t lenc, const double x, double res[], const size_t lenres)
本函数计算一个多项式及其导数,并将结果存储在大小为lenres的数组res中。输出数组包含dkP(x)/dxk的值,其中指定值x从k = 0开始。
6.2 多项式的分差表示
这里描述的函数处理的多项式是存储为牛顿分差表达式。在Abramowitz和Stegun的第25.1.4节和25.2.26节及Burden和Faires第三章中描述的分差法的使用,并在下面简要讨论。
给定函数f(x),可以构造一个n阶插值多项式Pn(x),它与函数f在n + 1个不同点(x0,x1,…,xn)处一致。这个多项式可以写成牛顿分差表示的形式
其中分差在Abramowitz和Stegun的第25.1.4节中定义。此外,还可以构造一个2n + 1次的插值多项式,它也匹配f在x0,x1,…,xn点的一阶导数。称为埃尔米特插值多项式,定义如下:
这里变量z定义为,即z2k=z2k+1=xk。分差 在Burden and Faires的第3.4节中讨论。