数学的函数经常会见到多项式,那么怎么让计算机帮助我们生成并计算多项式呢?一个简单的方法是直接循环,但是这样写出的代码惨不忍睹,另一个比较好的算法是中国古代的秦九韶算法,他们孰优孰劣呢?
问题简介
本文选取了一个多项式的问题,进行探究。
完整程序
#include <stdio.h>
#include <time.h>
#include <math.h>>
double Duoxiangshi( int n, double a[], double x ); //笨办法搞多项式
double Duoxiangshi2( int n, double a[], double x ); //秦九韶算法
int main()
{
int n = 0;
printf("请输入多项式最大次数:\n");
scanf("%d",&n);
double a[n];
for ( int i=0; i<=n; i++ )
{
printf("请输入第%d个系数:", i);
scanf("%lg", &a[i]);
}
double x = 0;
printf("请输入未知数x的值:\n");
scanf("%lg", &x);
double p = 0, q = 0;
p = Duoxiangshi( n, a, x );
q = Duoxiangshi2( n, a, x );
printf("常规值为%g", p);
printf("秦九韶为%g", q);
}
//直接用循环去写的多项式
double Duoxiangshi( int n, double a[], double x )
{
int i = 0;
double p = a[0];
for( i=1; i<=n; i++ )
{
p += a[i] * pow(x,i);
}
return p;
}
//秦九韶算法
double Duoxiangshi2( int n, double a[], double x )
{
int i = 0;
double p = a[n];
for ( i=n; i>0;i-- )
p = a[i-1] + x*p;
return p;
}
运行结果
可以观察到,秦九韶算法明显速度更快。所以算法设计的重要性不言而喻。