对于一个多项式,如: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),它显著减少了计算...
本主题涉及的是如何使用Java语言来实现这个功能,其中提到的算法是秦九韶算法,也称为霍纳(Horner)法则,这是一种高效计算多项式值的方法。 一元n次多项式通常表示为: \[ P(x) = a_nx^n + a_{n-1}x^{n-1} + \...
这些练习题涵盖了单项式乘以多项式的基本概念、运算规则、求值方法和应用场景等方面。 一、基础知识点 * 单项式的定义和性质 * 多项式的定义和性质 * 单项式乘以多项式的定义和运算规则 * 单项式乘以多项式的应用...
3.最后,采用 Horner 规则进行计算,得到多项式的值。 秦九韶算法的应用: 1.秦九韶算法可以应用于多项式的求值问题,例如求解多项式的值、计算多项式的导数等。 2.秦九韶算法也可以应用于其他领域,例如计算机...
Horner算法,也称为霍纳规则或霍纳方法,是一种在计算机编程中用于高效地评估多项式的方法。这个算法能够减少计算多项式时所需的乘法和加法操作次数,从而提高执行效率。在给定的"Horner算法小程序"中,我们可以预期...
综上所述,Horner算法是一种高效计算多项式的方法,尤其适用于需要频繁求解多项式值的场景,如数值分析、计算机图形学和控制理论等领域。其简单且易于实现的特性使得它在编程实践中广泛应用。通过理解并掌握Horner...
12. 多项式的应用题:多项式的应用题包括计算多项式的值、简化多项式、多项式的乘法和多项式的应用等。 本练习总共包含15道题,涵盖了多项式的乘法、展开、简化、应用等知识点。通过完成这些题目,学生可以熟悉...
1. **数值评估**:给定一个特定的x值,计算多项式在该点的值。可以使用 Horner's法则 来提高效率,减少中间计算的浮点数误差。 2. **插值**:通过已知点找到一个多项式,使得该多项式经过这些点。常见的插值方法有...
`evaluateAt`函数用于计算一元多项式在给定x值下的值。这可以通过使用Horner's Rule实现,这是一种高效的方法,它通过逐步代入x的值来减少乘法和加法的次数。具体实现如下: ```cpp double Polynomial::evaluateAt...
然后,它按照霍纳算法的规则计算多项式的值。`main` 函数中定义了一个多项式,并调用 `horner` 函数求值。 此外,压缩包中的其他文件可能是项目构建和配置文件,如 `.dsp` 和 `.dsw` 是Visual Studio的老版项目文件...
霍纳算法,也称为霍纳规则(Horner's Rule),是一种高效的多项式求值方法,由英国数学家威廉·乔治·霍纳在19世纪提出。在MATLAB中,霍纳算法可以用来快速计算多项式的值,特别是对于大型系数矩阵或方程组,能显著...
至于给定x后的多项式值,我们可以使用Horner's法则来提高计算效率。该法则指出,对于多项式`Pn(x) = a_n * x^n + a_{n-1} * x^{n-1} + ... + a_1 * x + a_0`,其值可以按以下方式计算: ```cpp double evaluate...
在MATLAB中,`PolyValm`函数采用了一种称为“Horner's方法”的经典算法来计算多项式的值。这种方法虽然简单且适用于单个点的评估,但在矩阵操作中可能会显得效率较低。`PolyValm2`很可能采用了更先进的技术,例如...
4. **评估多项式**:给定一个特定的x值,可以使用 Horner's rule 来快速计算多项式的值,避免重复的乘法和加法操作。 5. **排序与归约**:为了保持多项式简洁,可以对系数进行排序,删除零系数项,并对连续的常数项...
霍纳(Horner)算法是一种在数学和计算机科学中用于快速有效地求解多项式值的算法,特别是在硬件设计和编程中被广泛应用。在VLSI(Very Large Scale Integration,超大规模集成电路)领域,霍纳算法可以高效地实现...
使用评估多项式。 例子 实多项式 评估1 + 2 * x^2 at x = 2的多项式1 + 2 * x^2 at x = 2 : var horner = require ( "horner" ) console . log ( horner ( [ 1 , 0 , 2 ] , 2.0 ) ) 输出 9 复多项式 在x = 1+2i...
Horner's 方法是一种优化的多项式评估算法,它通过链式规则减少了计算步骤。假设多项式为a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0,我们可以按照以下方式评估: 1. 初始化结果r = a_n。 2. 对于i从n-1到0,依次...
秦九韶算法,又称霍纳算法(Horner algorithm),是中国南宋时期的数学家秦九韶提出的一种高效计算多项式值的方法。这种方法将一个高次多项式表示为一系列一次多项式的乘积,从而简化了计算过程,减少了乘法和加法的...
例如,对于`a14.ma`和`c = 3`,使用`P_ver`得到的多项式值与`Horner`函数的计算结果一致。 3. **浮点数误差分析**: 文件中提到的`abc1.m`部分展示了浮点数近似值与精确值之间的误差`E`和相对误差`R`。`temp`和`...