`
peng5047
  • 浏览: 14127 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

运用Horner规则计算多项式的值

阅读更多

对于一个多项式,如:5*X^3 + 4*X^2 + 2*X,我们该如何编程来求多项式的值呢?最直接的做法就是一项一项的求:先求5*X^3,再求4*X^2,继续求2*X,最后把它们的值加起来即可,这样做需要6次乘法运算,2次加法运算。但是运用Horner规则我们可以使用更少的乘法运算和加法运算来得到结果。Horner规则的思想是不断的运用乘法分配率提出X项。以刚才的例子来说,计算过程如下:

[(5*X + 4)*X + 2]*X

这样,只需要3次乘法运算和2次加法运算即得到结果了。

下面的C程序将普通做法和运用Horner规则进行对比

#include <stdio.h>
#define MAX_NUM 100 //约定多项式项数不超过100 

/*直接计算多项式*/
float polynomial_1(int n[][2],int num,float x,int* count_mul,int* count_add)
{
    int i,j;
    float sinpoly;//每个单项的值 
    float result;//多项式的值 
    result = 0;
    for(i = 0;i < num;i++)
    {
        sinpoly = n[i][0];
        for(j = 0;j < n[i][1];j++)
        {
            sinpoly = sinpoly * x;
            (*count_mul)++;
        }
        result = result + sinpoly;
        (*count_add)++;
    }
    return result;
}

/*运用Horner规则计算多项式*/
float polynomial_2(int n[][2],int num,float x,int* count_mul,int* count_add)
{
    int i,j;
    float result;//多项式的值
    result = n[0][0];
    for(i = 1;i < num;i++)
    {
        for(j = 0;j < n[i-1][1] - n[i][1];j++)
        {
            result = result * x;
            (*count_mul)++;
        }
        result += n[i][0];   
        (*count_add)++;      
    }
    if(n[num-1][1] != 0)//如果最后一项不是常数项,则要继续乘法运算 
    {
        for(j = 0;j < n[num-1][1];j++)
        {
            result *= x;
            (*count_mul)++;
        }
    }
    return result; 
} 
int main()
{   
    int n[MAX_NUM][2];
    int num;//多项式项数
    int count_mul;//乘法运算次数
    int count_add;//加法运算次数
    float x;
    int i;
    printf("please input the number of polynomial:\n");
    scanf("%d",&num);//输入多项式项数 
    printf("please input x:\n");
    scanf("%f",&x);
    for(i = 0;i < num;i++)
        scanf("%d %d",&n[i][0],&n[i][1]);//第一个数表示系数,第二个数表示x的阶数 
    count_mul = 0;
    count_add = 0;
    printf("polynomial_1=%f,count_mul=%d,count_add=%d\n",polynomial_1(n,num,x,&count_mul,&count_add),count_mul,count_add);
    count_mul = 0;
    count_add = 0;
    printf("polynomial_2=%f,count_mul=%d,count_add=%d\n",polynomial_2(n,num,x,&count_mul,&count_add),count_mul,count_add);
    system("pause"); 
    return 0;
}

 
分享到:
评论

相关推荐

    霍纳计算多项式(霍纳算法应用)

    霍纳计算多项式,也称为霍纳算法(Horner's method),是一种在计算机科学和数学中用于高效地求解多项式值的算法。这个算法的名字来源于英国数学家威廉·乔治·霍纳(William George Horner),它显著减少了计算...

    多项式求值的原理与高效计算方法

    多项式的标准形式为 其求值方法主要有直接计算法和霍纳法则(Horner's Rule)。霍纳法则通过嵌套因式的形式显著降低了计算复杂度,从适合快速求解高次多项式的值。本文结合实例详细阐述了多项式求值的基本方法及其...

    求一元n次多项式的值java实现

    本主题涉及的是如何使用Java语言来实现这个功能,其中提到的算法是秦九韶算法,也称为霍纳(Horner)法则,这是一种高效计算多项式值的方法。 一元n次多项式通常表示为: \[ P(x) = a_nx^n + a_{n-1}x^{n-1} + \...

    单项式乘以多项式练习题精选.doc

    Horner法是一种快速计算多项式在某一值时结果的方法,它通过将多项式重写为嵌套形式进行计算。而分配律则是单项式乘以多项式运算的基础,它通过将单项式与多项式的每一项分别相乘,然后将结果相加来求值。 四、单项...

    1.3.3秦九邵算法.doc

    3.最后,采用 Horner 规则进行计算,得到多项式的值。 秦九韶算法的应用: 1.秦九韶算法可以应用于多项式的求值问题,例如求解多项式的值、计算多项式的导数等。 2.秦九韶算法也可以应用于其他领域,例如计算机...

    Horner算法小程序

    Horner算法,也称为霍纳规则或霍纳方法,是一种在计算机编程中用于高效地评估多项式的方法。这个算法能够减少计算多项式时所需的乘法和加法操作次数,从而提高执行效率。在给定的"Horner算法小程序"中,我们可以预期...

    HORNER-ALGORITHM.rar_horner_horner algorithm_horner算法

    综上所述,Horner算法是一种高效计算多项式的方法,尤其适用于需要频繁求解多项式值的场景,如数值分析、计算机图形学和控制理论等领域。其简单且易于实现的特性使得它在编程实践中广泛应用。通过理解并掌握Horner...

    多项式求值与霍纳法则实现

    本文详细介绍了多项式求值的概念以及如何利用几种常见编程语言(Python、Java、C++)来实现多项式的求值过程,重点对比了基本迭代方法与霍纳法则(Horner's Method)两种求值方式的不同,后者由于减少了不必要的乘法计算...

    七年级数学下册第一章整式的乘除4整式的乘法第3课时多项式与多项式相乘练习2新版北师大版20191204136

    12. 多项式的应用题:多项式的应用题包括计算多项式的值、简化多项式、多项式的乘法和多项式的应用等。 本练习总共包含15道题,涵盖了多项式的乘法、展开、简化、应用等知识点。通过完成这些题目,学生可以熟悉...

    多项式求值及其高效计算方法-基于不同编程语言实现与比较

    内容概要:本文介绍了多项式求值的基本概念,并提供了几种常用编程语言(Python, Java, C++)下对常规和高效求值算法(Horner's Method)的实现案例。文中首先阐述了标准迭代方法来逐项累加的方式完成计算流程,然后重点...

    ch1_多项式的计算_

    1. **数值评估**:给定一个特定的x值,计算多项式在该点的值。可以使用 Horner's法则 来提高效率,减少中间计算的浮点数误差。 2. **插值**:通过已知点找到一个多项式,使得该多项式经过这些点。常见的插值方法有...

    一元多项式的计算C++链表

    `evaluateAt`函数用于计算一元多项式在给定x值下的值。这可以通过使用Horner's Rule实现,这是一种高效的方法,它通过逐步代入x的值来减少乘法和加法的次数。具体实现如下: ```cpp double Polynomial::evaluateAt...

    多项式求值方法及其Python与C++高效实现

    内容概要:本文详细介绍了多项式求值的基本概念及其常见求值方法,重点讲解了直接计算法与秦九韶算法(Horner算法),并提供了多种编程语言的代码实现示例。具体探讨了这两种算法的时间复杂度,并给出了推荐意见。...

    c.rar_horner

    然后,它按照霍纳算法的规则计算多项式的值。`main` 函数中定义了一个多项式,并调用 `horner` 函数求值。 此外,压缩包中的其他文件可能是项目构建和配置文件,如 `.dsp` 和 `.dsw` 是Visual Studio的老版项目文件...

    多项式求值方法及其在科学与工程领域的应用研究

    内容概要:本文档详细介绍了多项式的数学概念及其多种求值方法,涵盖直接法、Horner法则、分治法和基于快速傅里叶变换(FFT)的方法,探讨各方法的特点与适用范围。文中不仅解释了每种算法的基本原理,还提供了具体...

    霍纳算法matlab编程

    霍纳算法,也称为霍纳规则(Horner's Rule),是一种高效的多项式求值方法,由英国数学家威廉·乔治·霍纳在19世纪提出。在MATLAB中,霍纳算法可以用来快速计算多项式的值,特别是对于大型系数矩阵或方程组,能显著...

    duoxiangshi.rar_PN_c 求导_n次多项式_多项式的求导

    至于给定x后的多项式值,我们可以使用Horner's法则来提高计算效率。该法则指出,对于多项式`Pn(x) = a_n * x^n + a_{n-1} * x^{n-1} + ... + a_1 * x + a_0`,其值可以按以下方式计算: ```cpp double evaluate...

    matlab开发-PolyValm2AfasterMatrix多项式评估器

    在MATLAB中,`PolyValm`函数采用了一种称为“Horner's方法”的经典算法来计算多项式的值。这种方法虽然简单且适用于单个点的评估,但在矩阵操作中可能会显得效率较低。`PolyValm2`很可能采用了更先进的技术,例如...

    c.txt.rar_一元多项式

    4. **评估多项式**:给定一个特定的x值,可以使用 Horner's rule 来快速计算多项式的值,避免重复的乘法和加法操作。 5. **排序与归约**:为了保持多项式简洁,可以对系数进行排序,删除零系数项,并对连续的常数项...

Global site tag (gtag.js) - Google Analytics