一维多项式求值

来源:互联网 发布:atan2函数java 编辑:程序博客网 时间:2024/06/11 06:00

多项式(Polynomial)是基础数学中常用到的概念,多项式就是若干个单项式的和构成的式子。这里首先明确几个基本的概念。多项式中每个单项式称为多项式的项,多项式项的最高次数称为多项式的次数,不含字母的项称为常数项。

一 一维多项式的求值
对于一维多项式就是包含一个变量的多项式,一个普遍的一维多项式的形式如下:

P(x)=an1xn1+an2xn2++a1x+a0

一维多项式的求值就是对于上述多项式,计算在指定的x处的函数值。例如:

P(x)=3x6+7x5+2x3+7x27x15

怎么求解
通用多项式的值的算法可以采用递推的形式,首先可以将上述多项式变成如下的等价形式:

P(x)=(((an1x+an2)x+an3)x++a1)x+a0

通过这个表达式可以看出,只要从里往外逐层按照如下的方式递推,可计算得到整个一维多项式的值:

Rn1=an1

Rk=Rk+1x+ak,k=n2,n3,,1,0

通过逐层计算后,得到的R0便是多项式P(x)的值,我们依照这思路来编写一维多项式的算法,示例代码如下:

double polynomial1D(double a[],int n,double x)///1D表示一维的意思{    double result;    result=a[n-1];    for(int i=n-2;i>=0;i--)///递推算法计算    {        result=result*x+a[i];    }    return result;返回计算结果}

其中,输入参数 n 为多项式的项数,数组 a[ ]依次存放多项式的n个系数,x便是指定变量的值,函数返回的就是多项式在指定的x点的值:
应用举例:

#include<cstdio>double polynomial1D(double a[],int n,double x){    double result;    result=a[n-1];    for(int i=n-2;i>=0;i--)    {        result=result*x+a[i];    }    return result;}int main(){    static double a[7]={-15.0,-7.0,7.0,2.0,-3.0,7.0,3.0};    static double x[6]={-2.0,-0.5,1.0,2.0,3.7,4.0};    double result;    for(int i=0;i<6;i++)    {        result=polynomial1D(a,7,x[i]);        printf("x=%5.2lf时,p(x)=%13.7e\n",x[i],result);    }    return 0;}

%13.7e:先留个问题吧大概