计算多项式函数值技巧

形如\(f(x)=a_n·x^n+a_{n-1}·x^{n-1}+…+a_2·x^2+a_1·x+a_0\)的函数,叫做多项式函数,它是由常数与自变量x经过有限次乘法与加法运算得到的。

假设现在有一个最高次幂为n的函数,各项系数存储在数组a中,那么要计算这个函数的某一个函数值,可以:

double f(double x) {
    double res = 0, t;
    for (int i = n; i > 0; i--) {
        t = 1;
        for (int j = 0; j < i; j++) {
            t = t * x;
        }
        res += t * a[i];
    }
    res += a[0];
    return res;
}

这样计算速度非常慢,因为有很多重复的计算。

考虑这样一个多项式,\(f(x)=4·x^4+3·x^3+2·x^2+x+1\),可以对他进行变形:\(f(x)=((((0·x+4)·x+3)·x+2)·x+1)·x+1\),这样计算可以比边大量的重复运算,代码如下:

double f(double x) {
    double res = 0;
    for (int i = n; i >= 0; i--) {
        res = res * x + a[i];
    }
    return res;
}

以上代码中,0次项系数存储在\(a[0]\)中,1次项系数存储在\(a[1]\)中,以此类推。

posted @ 2021-02-24 21:40  牟翔宇  阅读(414)  评论(0编辑  收藏  举报