求多项式相加的迭代算法

来源:互联网 发布:盘古建站 源码 编辑:程序博客网 时间:2024/06/06 19:47

问题描述:

假设有n+2个实数a0,a1,…,an,和x的序列,要对多项式   

           

        求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。

        通过如下变换我们可以得到另一种算法,即Pn(x) =

                    (1) 

        该算法称之为秦九韶或者霍纳算法,就是通过提取公因式x来减少乘法的次数,减少的乘法次数为(n-1)+(n-2)+……+1 = n(n-1)/2,所以一共只需要做(n+1)n/2 - (n-1)n/2 = n次乘法和n次加法就可以了。对于计算机来说,做加法比做乘法快得多,所以效率的提高是很大的。

程序实现

实现秦九韶算法最关键的是要注意迭代式的求法,我们观察(1)式可以发现,外面的式子就是里面的式子加上小一阶的系数再乘上x得到的,所以我们可以得到p(n) = an-1+p(n)x. c语言代码如下:

//a[]表示储存系数a0到an的数组,n是数组的大小,也是项数double PloyAdd(double a[], int n, double x){    double res = 0.0;     for(int i=n; i>=0; --i)        res = x*res + a[i];     return res;}





0 0