用直接计算法和秦九韶算法求解一元n次多项式

用直接计算法和秦九韶算法求解一元n次多项式

一、实验目的

  1. 掌握秦九韶算法求解多项式的基本原理;
  2. 分别编程实现用直接计算法和秦九韶算法求解一元n次多项式 f(x)=3x6+4x4-2x3-7x2+x-8在x=2.5时的值;
  3. 比较两种算法求解多项式的时间。

二、实验设备

  1. 编程语言:C;
  2. 实验环境:已安装相关编程环境的计算机1台。

三、算法实现及结果分析

#include<stdio.h>
#include<math.h>
#include<time.h>
#define max 10
#define maxt 1e6
clock_t start, stop;
double duration;
//直接法
double f(double x,double a[],int n) {
	int i;
	double y=0;
	for (i = 0;i < n;i++) {
		y += a[i] * pow(x, n - i-1);
	}
	return y;
}
//秦九韶算法
double q(double x, double a[],int n) {
	int i;
	double y=0;
	for (i = 0;i <n;i++) {
		y = y * x + a[i];
	}
	return y;
}
//比较两种算法求解多项式的时间
void run(double(*f)(double, double*, int), double a[], int case_n,int n,int x) {
	int i;
	start = clock();
	for (i = 0;i < maxt;i++) {
		(*f)(x, a, n);
	}
	stop = clock();
	duration = ((double)(stop - start)) / CLK_TCK;
	printf("第%d种算法打点次数 =%f\n", case_n, (double)(stop - start));
	printf("时间为 =%6.2e\n", duration);
}
int main() {
	double x;
	int n;
	double a[max];
	printf("输入x的值\n");
	scanf_s("%lf", &x);
	printf("输入多项式的最高项的次数\n");
	scanf_s("%d", &n);
	for (int i = 0;i < n+1;i++) {
		printf("第%d项多项式系数为:",i + 1);
		scanf_s("%lf", &a[i]);
	}
	double t1=f(x, a,n+1);
	double t2=q(x, a,n+1);
	printf("直接计算:%lf\n",t1);
	printf("秦九韶算法:%lf\n", t2);
	run(f, a, 1,n+1,x);
	run(q, a, 2,n+1,x);
	return 0;
}

maxt=1e5
请添加图片描述
maxt=1e6
请添加图片描述

maxt=1e7
请添加图片描述

由运行结果我们可知,直接法与秦九韶算法的时间差距在10倍左右。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值