秦九韶算法实验报告
- 格式:doc
- 大小:34.00 KB
- 文档页数:3
秦九韶算法介绍和实例分析具体而言,秦九韶算法通过构建一个累加器,用来存储每一次迭代计算的结果。
首先,将多项式的最高次项系数存入累加器中。
然后,通过迭代计算,将每一个次高次项的系数与上一次迭代的结果相乘,并加上该项的常数部分。
依次迭代计算,直到将所有的项都计算完毕。
最终,累加器中的值即为多项式的求值结果。
下面以一个实例来说明秦九韶算法的应用。
假设我们要求解如下多项式的值:P(x)=2x^4+3x^3-5x^2+6x-4首先,我们可以将多项式表示为累加的形式:P(x)=(((2x+3)x-5)x+6)x-4然后,我们可以使用秦九韶算法进行计算。
首先,将最高次项系数2存入累加器中。
累加器=2接下来,进行迭代计算。
首先,将累加器乘以x,并加上次高次项的常数部分3,得到结果5x+3累加器=(5x+3)然后,将累加器再次乘以x,并加上次高次项的常数部分-5,得到结果-5x^2+(5x+3)。
累加器=(-5x^2+5x+3)依次类推,进行下一次迭代计算。
最终,得到累加器的值为-4累加器=(-4)因此,多项式P(x)在x=1处的值为-4通过以上实例分析,我们可以看到,秦九韶算法通过使用累加的方式进行计算,大大减少了乘法和加法运算的次数,提高了算法的效率。
在实际应用中,秦九韶算法常用于求解多项式的值,例如在计算机图形学中,可用于求解曲线上的点的坐标。
同时,该算法还可以用于多项式的除法和求导等运算中。
总结起来,秦九韶算法是一种用于求解多项式的高效算法,通过使用累加的方式进行计算,减少了乘法和加法运算的次数。
该算法在实际应用中具有广泛的应用价值,可以提高计算效率,同时也为其他相关运算提供了基础。
秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。
在西方被称作霍纳算法。
秦九韶(约公元1202年-1261年),字道古,南宋末年人,出生于鲁郡(今山东曲阜一带人)。
计算方法
一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。
在人工计算时,一次大大简化了运算过程。
把一个n次多项式
改写成如下形式:
求多项式的值时,首先计算最内层括号内一次多项式的值,即
V1=an*x+a n-1
然后由内向外逐层计算一次多项式的值,即
这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。
结论:对于一个n次多项式,至多做n次乘法和n次加法。
2007-2008(2)专业课程实践论文秦九昭算法数学04 王琳,19号秦九韶算法的特典在于,它通过一次式的反复计算,逐步得出高次多项式的值。
具体地说,它将一个n 次多项式的求解问题,归结为重复计算n 个一次式a v v k n k k x --+=1,k=1,2,…,n (1) 来实现。
这种化繁为简的处理方法在数值分析中是屡见不鲜的。
现在考虑秦九韶算法的计算程序。
按式(1)计算,每求出一个“新值”v k 以后,“老值”v k 1-便失去继续保存的价值,因此可以将新值v k 存放在老值v k 1-所占用的单元内。
这样,我们只要设置一个单元v 进行累算,而将式(1)表为下列动态形式v v x a k n ⇒+∙-, k=1,2,…,n 执行这组算式之前,应先送初值a n 到单元v 中,v a n ⇒ 图描述了秦九韶算法(框1)准备部分。
单元v 送初值a n ,单元k 中送数值1.(框2)计算部分。
每循环一次,单元v 中的老值v k 1-为新值v k 所替换。
(框3)控制部分。
检查单元k 中计数值以判断循环应否结束。
当计数值为n 时输出v 中结果,否则转框4.(框4)修改部分。
修改单元k 中计数值,然后转框2再作下一步的计算。
图1#include<stdio.h>#include <math.h>float qin(float a[],int n,float x){ float r=0;int i;for(i=n;i>=0;i--)r=r*x+a[i];return r;}main(){ float a[50],x,r=0;int n,i;do{ printf("Input frequency:");scanf("%d",&n);}while(n<1);printf("Input value:");for(i=0;i<=n;i++)scanf("%f",&a[i]);printf("Input x:");scanf("%f",&x);r=qin(a,n,x);printf("Answer:%f",r);getch();}利用秦九韶算法求多项式1)(43245+-+-=x x x x x p 在3=x 时的值。
用秦九韶算法计算多项式的值c语言多项式是数学中的一个重要概念,它在各个领域都有广泛的应用。
在计算机科学中,多项式的计算也是一个常见的问题。
本文将介绍一种高效的算法——秦九韶算法,用它来计算多项式的值。
一、秦九韶算法的原理秦九韶算法是一种快速计算多项式值的算法。
它的基本思想是将多项式的系数和变量分离,然后通过递推的方式计算多项式的值。
具体来说,假设多项式为:f(x) = a0 + a1x + a2x^2 + ... + anx^n我们可以将其表示为:f(x) = a0 + x(a1 + x(a2 + ... + x(an-1 + anx)...))这样,我们就可以通过递推的方式计算多项式的值。
具体来说,我们可以从最高次项开始,依次计算每一项的值,然后将其累加起来。
这样,我们就可以在O(n)的时间复杂度内计算多项式的值。
二、用c语言实现秦九韶算法下面,我们将用c语言来实现秦九韶算法。
具体来说,我们可以定义一个数组来存储多项式的系数,然后通过循环来计算多项式的值。
代码如下:```c#include <stdio.h>double qinjiushao(double a[], int n, double x) {double result = a[n];for (int i = n - 1; i >= 0; i--) {result = result * x + a[i];}return result;}int main() {double a[] = {1, 2, 3, 4, 5};int n = 4;double x = 2;double result = qinjiushao(a, n, x);printf("f(%lf) = %lf\n", x, result);return 0;}```在这个例子中,我们定义了一个数组a来存储多项式的系数,n表示多项式的最高次数,x表示要计算的多项式的值。
《数值计算》实验报告 学院:软件学院 专业:软件工程 班级:2班 实验名称 秦九昭算法姓名 爱上辰 学号 1402120217 成绩实验报告内容要求:一.实验目的编写秦九韶算法程序,并用该程序计算多项式623)(35+-+=x x x x f在1.1=x ,2.1,3.1的值。
二.实验原理秦九韶算法实际上就是多项式的化简。
根据秦九昭算法,变换成计算机语言,求多项式的值时,首先计算最内层括号内一次多项式的值,然后由内向外逐层计算一次多项式的值,这样,求n 次多项式f(x)的值就转化为求n 个一次多项式的值。
三.实验环境Visual Studio 2013,C++语言四.实验过程(编写的程序)#include"iostream"using namespace std;void main(){int n;float a[100], x, v[100];//存放系数cout << "请输入项数:" << endl;cin >> n;cout << "请输入X 的值:" << endl;cin >> x;for (int i = 0; i < n; i++)//对每项系数进行赋值{cout << "请输入第" << i + 1 << "项的系数:" << endl;cin >> a[i];}v[0] = a[0];//秦九昭算法第一次赋值for (int j = 1; j< n;j++)//开始秦九昭算法的循环v[j] = v[j-1] * x + a[j];cout << "当x=" << x <<"时,f(x)="<< v[n-1] <<endl;system("pause");}五.实验结果及分析当X=1.1时,f(x)= 9.4035当X=1.2时,f(x)= 11.2723当X=1.3时,f(x)= 13.7039六.实验反思1.应该采用链表存贮系数,数组有限制性只能存放100项。
贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级: 信本班 实验日期: 2013 年 9 月 3日学 号: 110703010038 姓名: 孙泽香 指导教师: 实验成绩:一、实验名称实验一:递推法的稳定性,秦九韶算法二、实验目的及要求1. 熟悉数值稳定的概念, 通过上机计算,了解舍入误差所引起的数值不稳定性.2. 培养Matlab 编程与上机调试能力.三、实验环境每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0)。
四、实验内容1.教材例1.13中,取16位数字计算,并分析、比较计算结果.2.设100999832()101100994321f x x x x x x x =+++++++,用秦九韶算法编程计算()f x 在1,2,3,4x =上的值.五、算法描述及实验步骤1. 设(1)从0I 尽可能精确的近似值出发,利用递推公式:115(1,2,,14)n n I I n n -=-+=, 计算从1I 到14I 的近似值;(2)从15I 较粗糙的估计值出发,用递推公式:111(15,14,,3,2)55n n I I n n -=-+=计算从1I 到14I 的近似 .2. 秦九韶算法给定n次多项式Pn(x)=a(n)x^n+a(n-1)x^(n-1)+…+a(1)x+a(0).要计算Pn(x)在x处的值。
今考虑n次多项式Pn(x),用V(k)表示第k层的值(从里面数起),依次计算 V(1)=a(n)x+a(n-1) V(2)=V(1)x+a(n-2) … V(n)=V(n-1)x+a(0).显然V(n)=Pn(x).记a(n)=V(0),上述计算过程可写成:V(0)=a(n)V(k)=V(k-1)*x+a(n-k),(k=1,2,…,n).六、调试过程及实验结果1.12 算法一:>> format long e>> syms x;>> fun=inline('1./(x+5)');>> I(1)=quad(fun,0,1);>> for n=1:14I(n+1)=1/n-5*I(n);end>> II =Columns 1 through 31.823215568047383e-001 8.839221597630853e-0025.803892011845735e-002Columns 4 through 64.313873274104657e-002 3.430633629476715e-0022.846831852616427e-002Columns 7 through 92.432507403584530e-002 2.123177267791634e-0021.884113661041828e-002Columns 10 through 121.690542805901971e-002 1.547285970490148e-0021.354479238458353e-002Columns 13 through 151.560937141041567e-002 -1.123780129001425e-0037.704747207357855e-002算法二:>> format long e>> syms x;>> fun=inline('x.^14./(x+5)');>> I(15)=quad(fun,0,1);>> for n=14:-1:1I(n)=1/(5*n)-I(n+1)/5;end>> II =Columns 1 through 31.823215567939547e-001 8.839221603022675e-0025.803891984886631e-002Columns 4 through 64.313873408900180e-002 3.430632955499104e-0022.846835222504479e-002Columns 7 through 92.432490554144271e-002 2.123261514992931e-0021.883692425035346e-002Columns 10 through 121.692648985934385e-002 1.536755*********e-0021.407133739268709e-002Columns 13 through 151.297664636989789e-002 1.203984507358747e-0021.122934606063409e-0021.13 设f(x)=101x^100+100x^99+…+3x^2+2x+1,用秦九韶算法编程计算f(x)在x=1,2,3,4上的值。
实验1 秦九韶算法(贺俊杰 2020022060)一、实验目的人类的计算能力等于计算工具的效率与计算方法的效率的乘积,高效率计算方法大大减少了计算次数,从而也能较少舍入误差的传播和积累,构造高效率计算方法一直是科学计算的一个主要目的。
本次实验以完成秦九韶算法为契机,深入了解高效计算多项式结果的数值计算方法,同时加深对Matlab 环境的熟悉。
二、算法分析对于n 次多项式:1110()n n n n n P x a x a x a x a −−=+++ (1)可改写为嵌套形式:1210()((()))n n n n p x a x a x a x a x a −−=++++ (2)在(1)式中,n i n i a x −−需要计算n i −次乘法运算(其中0,1,1i n =−)和n 次加法运算,共需要进行(1)2n n+次乘法运算和n 次加法运算。
而在(2)式中,仅需要经过n 次乘法运算和n 次加法运算,能够极大地减少运算次数,提高运算效率。
根据程序设计地习惯,把公式(2)写成下来等价的地推形式:(1,2,)n n k y a y y x a k n −⇐⎧⎨⇐⋅+=⎩ (3)三、算法代码实现秦九韶算法Matlab 实现如下:Qinjiu.m 文件其中a 为多项式系数从高次向低次排列数组(缺项系数为0),n 为多项式多高次数,x 为变量。
四、实验结果1、 设543()851f x x x x =++−,计算()f x 在1,1.5,2.1,3x =上的值。
编写run_qinjiu.m 代码文件如下所示:run_qinjiu.m 文件取多项式系数a = [8, 5, 1, 0, 0, -1],运行结果如下图所示:图1 run_qinjiu.m 运行结果由图可知算法能正确运行。
2、 利用Matlab 库中的horner 命令,可直接把多项式变为如(2)式的嵌套形式。
编写run_horner.m 代码文件如下所示:程序运行结果如下图所示:从图中可看出,horner库函数可正确地将多项式转为嵌套形式。
《算法案例:秦九韶算法》教学教案第一篇:《算法案例:秦九韶算法》教学教案秦九韶算法学习目标1.了解秦九韶算法的计算过程,并理解利用秦九韶算法可以减少计算次数提高计算效率的实质。
2.掌握数据排序的原理能使用直接排序法与冒泡排序法给一组数据排序,进而能设计冒泡排序法的程序框图及程序,理解数学算法与计算机算法的区别,理解计算机对数学的辅助作用。
学习重难点重点:1.秦九韶算法的特点2.两种排序法的排序步骤及计算机程序设计难点:1.秦九韶算法的先进性理解2.排序法的计算机程序设计学法与学习用具学法:1.探究秦九韶算法对比一般计算方法中计算次数的改变,体会科学的计算。
2.模仿排序法中数字排序的步骤,理解计算机计算的一般步骤,领会数学计算在计算机上实施的要求。
学习用具:电脑,计算器,图形计算器学习设想(一)创设情景,揭示课题我们已经学过了多项式的计算,下面我们计算一下多项式f(x)=x5+x4+x3+x2+x+1当x=5时的值,并统计所做的计算的种类及计算次数。
根据我们的计算统计可以得出我们共需要10次乘法运算,5次加法运算。
我们把多项式变形为:f(x)=x2(1+x(1+x(1+x)))+x+1再统计一下计算当x=5时的值时需要的计算次数,可以得出仅需4次乘法和5次加法运算即可得出结果。
显然少了6次乘法运算。
这种算法就叫秦九韶算法。
(二)研探新知/ 41.秦九韶计算多项式的方法f(x)=anxn+an-1xn-1+an-2xn-2+Λ+a1x+a0=(anxn-1+an-1xn-2+an-2xn-3+Λ+a1)x+a0=((anxn-2+an-1xn-3+Λ+a2)x+a1)x+a0=ΛΛ=(Λ((anx+an-1)x+an-2)x+Λ+a1)+a0例1 已知一个5次多项式为f(x)=5x5+2x4+3.5x3-2.6x2+1.7x-0.8 用秦九韶算法求这个多项式当x=5时的值。
解:略思考:(1)例1计算时需要多少次乘法计算?多少次加法计算?(2)在利用秦九韶算法计算n次多项式当x=x0时需要多少次乘法计算和多少次加法计算?练习:利用秦九韶算法计算f(x)=0.83x5+0.41x4+0.16x3+0.33x2+0.5x+1 当x=5时的值,并统计需要多少次乘法计算和多少次加法计算?例2 设计利用秦九韶算法计算5次多项式f(x)=a5x5+a4x4+a3x3+a2x2+a1x+a0当x=x0时的值的程序框图。
《数值计算》实验报告 学院:软件学院 专业:软件工程 班级:2班 实验名称 秦九昭算法
姓名 爱上辰 学号 1402120217 成绩
实验报告内容要求:
一.实验目的
编写秦九韶算法程序,并用该程序计算多项式623)(35+-+=x x x x f
在1.1=x ,2.1,3.1的值。
二.实验原理
秦九韶算法实际上就是多项式的化简。
根据秦九昭算法,变换成计算机语言,求多项式的值时,首先计算最内层括号内一次多项式的值,然后由内向外逐层计算一次多项式的值,这样,求n 次多项式f(x)的值就转化为求n 个一次多项式的值。
三.实验环境
Visual Studio 2013,C++语言
四.实验过程(编写的程序)
#include"iostream"
using namespace std;
void main()
{
int n;
float a[100], x, v[100];//存放系数
cout << "请输入项数:" << endl;
cin >> n;
cout << "请输入X 的值:" << endl;
cin >> x;
for (int i = 0; i < n; i++)//对每项系数进行赋值
{
cout << "请输入第" << i + 1 << "项的系数:" << endl;
cin >> a[i];
}
v[0] = a[0];//秦九昭算法第一次赋值
for (int j = 1; j< n;j++)//开始秦九昭算法的循环
v[j] = v[j-1] * x + a[j];
cout << "当x=" << x <<"时,f(x)="<< v[n-1] <<endl;
system("pause");
}
五.实验结果及分析
当X=1.1时,f(x)= 9.4035
当X=1.2时,f(x)= 11.2723
当X=1.3时,f(x)= 13.7039
六.实验反思
1.应该采用链表存贮系数,数组有限制性只能存放100项。
2. 注意项数,有的项系数为0,导致漏输进而导致结果错误。
3.注意变量应该为float型,避免出现强制转换而出现误差。