秦九韶算法介绍及MATLAB实现

    xiaoxiao2021-04-15  562

    版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_38451800/article/details/90418337

    秦九韶算法介绍及MATLAB实现

    目录1 秦九韶算法由来2 原理公式及MATLAB实现MATLAB代码实现 3 另外一个好处——求f(x)在x*处导数值4 举例5 C语言代码实现6 Java代码实现

    目录

    数值计算中算法设计好坏不但影响计算结果的精度,还可大量节省计算时间,减少运算次数和舍入误差,这也是算法设计中一个重要原则,下面以多项式求值为例,介绍数值计算中第一个常用的技巧——秦九韶算法或Horner法则(霍纳法则)。

    1 秦九韶算法由来

    19世纪初,英国数学家威廉·乔治·霍纳重新发现并证明,后世称作霍纳算法(Horner’s method、Horner scheme)。但是,19世纪英国传教士伟烈亚力Alexander Wylie. (1815–1887) 最早对霍纳的发明权提出质疑。他在1852年著的《中国科学扎记》(Jottings on the Science of the Chinese)一篇论文中,详细介绍秦九韶的正负开方术之后写道“读者不难认出这就是霍纳在1819年因为发表《解所有次方程》论文,被数学家奥古斯都·德·摩根评为‘必使其发明人因发现此算法而置身于重要发明家之列’的方法;我以为应该对霍纳的发明权提出辩驳。欧洲的朋友们可能会觉得意外,一位来自天朝帝国的竞争者,有更大的机会确立他的优先权”。此后,日本数学史家三上义夫在《中日数学史》一书中在详述秦九韶的正负开方术后写道:“谁能否认,霍纳的辉煌方法,至少在早于欧洲六百年之前,已经在中国运用了。”。三上义夫还最先指出,秦九韶算法起源于汉代《九章算术》的开方法。其后王玲和李约瑟有专文论述秦九韶算法起源于《九章算术》。前苏联数学史家尤什克维奇说“这是中国传统数学最伟大成就之一”,他还说印度人不知有此方法,而阿拉伯数学家可能从中国前人传入此方法。

    2 原理公式及MATLAB实现

    设给定n次多项式: 已知系数矩阵A[]和x*,求f(x*)值。 分析:用常规方法(用重复乘法计算幂,再把各项相加)计算出结果最多需要n次加法和(n^2+n)/2次乘法。若用x迭代的方法计算幂则需要n次加法和2n+1次乘法。如果计算中的数值数据是以字节方式储存的,那么常规方法约需要占用字节的2n倍空间。如果用秦九韶算法呢? 若采用:f(x)=(…( a(0)*x+a(1) )*x+…+a(n-1) )x+a(n) (1),则b=f(x)值即为所求,此算法被称为秦九韶算法。用它计算n次多项式只需作n次加法和n次乘法,最多需要占用的字节的n倍空间。

    MATLAB代码实现

    function p=QJS(A,x) %秦九韶算法,A为函数系数向量,降幂排列,x为某点 n=length(A); p=A(1); for k=1:1:n-1 p=p*x+A(k+1); end

    3 另外一个好处——求f(x)在x*处导数值

    我们对于上面(1)式变形可得: b(0)=a(0) b(i)=b(i-1)*x+a(i),其中i=1,2,3……n。 所以对f(x)求导数可得: q(x)=b(0)x^(n-1)+…+b(n-1),又是一个多项式。 所以,又可以用秦九韶算法求解。

    4 举例

    5 C语言代码实现

    double f (int n,double a[],double x){//n代表a[]的大小,数组的传递需要指定数组大小 int i; //a[]储存每个x项的系数值,在函数外初始化 double p=a[n];//初始化p; for(i=n;i>0;i--) p=a[i-1]+x*p; return p; }

    6 Java代码实现

    class test{ public static long poly2(int[] arr, int x, int n){ //arr存储系数, x 表示基数, n 表示幂 long poly = 0; for(int i = 0; i <= n; i++) poly = poly * x + arr[i]; return poly; } public static void main(String[] args) { int[]b = {4,8,0,1,2}; System.out.println(poly2(b,3,4)); } }

    ———————————————————————————————————————— 部分内容摘自:博主:yep, 网址:[1]: https://blog.csdn.net/AC_AC/article/details/81205232 博主:远在远方的风比远方更远, 网址[2]: https://blog.csdn.net/qq_22073849/article/details/71515855 如有不妥之处,请联系博主,谢谢。


    最新回复(0)