horner算法
⑴ 中国数学发展史-宋元数学总结
宋元数学总结
唐朝亡后,五代十国仍是军阀混战的继续,直到北宋王朝统一了中国,农业、手工业、商业迅速繁荣,科学技术突飞猛进。从公元十一世纪到十四世纪(宋、元两代),筹算数学达到极盛,是中国古代数学空前繁荣,硕果累累的全盛时期。这一时期出现了一批着名的数学家和数学着作,列举如下:贾宪的《黄帝九章算法细草》(11世纪中叶),刘益的《议古根源》(12世纪中叶),秦九韶的《数书九章》(1247),李冶的《测圆海镜》(1248)和《益古演段》(1259),杨辉的《详解九章算法》(1261)、《日用算法》(1262)和《杨辉算法》(1274-1275,朱世杰的《算学启蒙》(1299)和《四元玉鉴》(1303)等等。
宋元数学在很多领域都达到了中国古代数学,甚至是当时世界数学的巅峰。其中主要的工作有:(1)高次方程数值解法;(2)天元术与四元术,即高次方程的立法与解法,是中国数学史上首次引入符号,并用符号运算来解决建立高次方程的问题;(3)大衍求一术,即一次同余式组的解法,现在称为中国剩余定理;(4)招差术和垛积术,即高次内插法和高阶等差级数求和。
另外,其它成就包括勾股形解法新的发展、解球面直角三角形的研究、纵横图(幻方)的研究、小数(十进分数)具体的应用、珠算的出现等等。
这一时期民间数学教育也有一定的发展,以及中国和伊斯兰国家之间的数学知识的交流也得到了发展。
⑵ 除贪心算法外 还有哪些算法
你指的是算法设计的技巧和方法吧~
这些多了
比如最简单的归纳法(例如递归求整数幂、horner规则的二项式求值等等),万能的回溯法(本质上即穷举搜索,能解决大部分的枚举类问题,如8皇后),高效的动态规划(“填表格法”,能将许多最优解问题以极快时间内解决,典型例子如背包问题的动态规划求解),还有很多(分支定界,分治,深度和广度优先遍历,随机算法,近似算法等等)不过这些是最基础的算法知识了……贪心属于最先割技术,每次求出当前条件下的最优解,这方面可以参考《算法导论》及《算法设计与分析》等相关书籍,相信能有不少收获。
⑶ 秦九韶算法
秦九韶算法是一种将一元n次多项式的求值问题转化为n个一次式的算法。其大大简化了计
秦九韶算法
算过程,即使在现代,利用计算机解决多项式的求值问题时,秦九韶算法依然是最优的算法。
在西方被称作霍纳算法,是以英国数学家霍纳命名的。
编辑本段秦九韶简介
秦九韶(约公元1202年-1261年),字道古,南宋末年人,出生于鲁郡(今山东曲阜一带人)。早年曾从隐君子学数术,后因其父往四川做官,即随父迁徙,也认为是普州安岳(今四川安岳县)人。秦九韶与李冶、杨辉、朱世杰并称宋元数学四大家。(安岳县于1998年9月正式开工建设秦九韶纪念馆,2000年12月竣工落成。)
秦九韶聪敏勤学,宋绍定四年(公元1231),秦九韶考中进士,先后担任县尉、通判、参议官、州守等职。先后在湖北、安徽、江苏、浙江等地做官。南宋理宗景定元年(公元1260年)出任梅州(今广东梅县)守,翌年卒于梅州。据史书记载,他“性及机巧,星象、音律、算术以至营造无不精究”,还尝从李梅亭学诗词。他在政务之余,以数学为主线进行潜心钻研,且应用范围至为广泛:天文历法、水利水文、建筑、测绘、农耕、军事、商业金融等方面。
秦九韶是我国古代数学家的杰出代表之一,他的《数书九章》概括了宋元时期中国传统数学的主要成就,尤其是系统总结和发展了高次方程的数值解法与一次同余问题的解法,提出了相当完备的“正负开方术”和“大衍求一术”。对数学发展产生了广泛的影响。
秦九韶是一位既重视理论又重视实践,既善于继承又勇于创新的科学家,他被国外科学史家称为是“他那个民族,那个时代,并且确实也是所有时代最伟大的数学家之一。
编辑本段数书九章
宋淳祜四至七年(公元1244至1247),秦九韶在湖州为母亲守孝三年期间,把长期积累的数学知识和研究所得加以编辑,写成了举世闻名的数学巨着《数书九章》。 书成后,并未出版。原稿几乎流失,书名也不确切。后历经宋、元,到明建国,此书无人问津,直到明永乐年间,在解缙主编《永乐大典》时,记书名为《数学九章》。又经过一百多年,经王应麟抄录后,由王修改为《数书九章》。
全书不但在数量上取胜,重要的是在质量上也是拔尖的。从历史上来看,秦九韶的《数
秦九韶纪念馆
书九章》可与《九章算术》相媲美;从世界范围来看,秦九韶的《数书九章》也不愧为世界数学名着。
他在《数书九章》序言中说,数学“大则可以通神明,顺性命;小则可以经世务,类万物”。所谓“通神明”,即往来于变化莫测的事物之间,明察其中的奥秘;“顺性命”,即顺应事物本性及其发展规律。在秦九韶看来,数学不仅是解决实际问题的工具,而且应该达到“通神明,顺性命”的崇高境界。
《数书九章》全书共九章九类,十八卷,每类9题共计81个算题。该书着述方式,大多由“问曰”、“答曰”、“术曰”、“草曰”四部分组成:“问曰”,是从实际生活中提出问题;“答曰”,是给出答案;“术曰”,是阐述解题原理与步骤;“草曰”,是给出详细的解题过程。另外,每类下还有颂词,词简意赅,用来记述本类算题主要内容、与国计民生的关系及其解题思路等。
编辑本段秦九韶算法
一般地,一元n次多项式的求值需要经过[n(n+1)]/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。在人工计算时,一次大大简化了运算过程。特别是在现代,在使用计算机解决数学问题时,对于计算机程序算法而言秦九韶算法可以以更快的速度得到结果,减少了CPU运算时间。
把一个n次多项式f(x)=a[n]x^n+a[n-1]x^(n-1)+......+a[1]x+a[0]改写成如下形
秦九韶
:
f(x)=a[n]x^n+a[n-1]x^(n-1)+......+a[1]x+a[0]
=(a[n]x^(n-1)+a[n-1]x^(n-2)+......+a[1])x+a[0]
=((a[n]x^(n-2)+a[n-1]x^(n-3)+......+a[2])x+a[1])x+a[0]
=......
=(......((a[n]x+a[n-1])x+a[n-2])x+......+a[1])x+a[0].
求多项式的值时,首先计算最内层括号内一次多项式的值,即
v[0]=a[n]
v[1]=a[n]x+a[n-1]
然后由内向外逐层计算一次多项式的值,即
v[2]=v[1]x+a[n-2]
v[3]=v[2]x+a[n-3]
......
v[n]=v[n-1]x+a[0]
这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。
(注:中括号里的数表示下标)
结论:对于一个n次多项式,至多做n次乘法和n次加法。
编辑本段意义
该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,对于计算机来说,做一次乘法运算所用的时间比作一次加法运算要长得多,所以此算法极大地缩短了CPU运算时间。
(附:计算机程序)
INPUT “n=”;n
INPUT “an=”;a
INPUT “x=”;x
v=a
i=n-1
WHILE i>=0
PRINT “i=”;i
INPUT “ai=”;a
v=v*x+a
i=i-1
WEND
PRINT v
END
编辑本段PASCAL算法实现
v[1]:=a[n]*k+a[n-1];
for i:=2 to n do
v[i]:=v[i-1]*k+a[n-i];
writeln(v[n]);
⑷ matlab中horner函数要怎么编程
7.1.1 分段线性插值
所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线,这也是计算机绘制图形的基本原理。实现分段线性插值不需编制函数程序,MATLAB自身提供了内部函数interp1其主要用法如下:
interp1(x,y,xi) 一维插值
◆ yi=interp1(x,y,xi)
对一组点(x,y) 进行插值,计算插值点xi的函数值。x为节点向量值,y为对应的节点函数值。如果y 为矩阵,则插值对y 的每一列进行,若y 的维数超出x 或 xi 的维数,则返回NaN。
◆ yi=interp1(y,xi)
此格式默认x=1:n ,n为向量y的元素个数值,或等于矩阵y的size(y,1)。
◆ yi=interp1(x,y,xi,’method’)
method用来指定插值的算法。默认为线性算法。其值常用的可以是如下的字符串。
● nearest 线性最近项插值。
● linear 线性插值。
● spline 三次样条插值。
● cubic 三次插值。
所有的插值方法要求x是单调的。x 也可能并非连续等距的。
正弦曲线的插值示例:
>> x=0:0.1:10;
>> y=sin(x);
>> xi=0:0.25:10;
>> yi=interp1(x,y,xi);
>> plot(x,y,’0’,xi,yi)
则可以得到相应的插值曲线(读者可自己上机实验)。
Matlab也能够完成二维插值的运算,相应的函数为interp2,使用方法与interpl基本相同,只是输入和输出的参数为矩阵,对应于二维平面上的数据点,详细的用法见Matlab联机帮助。
7.1.2 最小二乘法拟合
在科学实验的统计方法研究中,往往要从一组实验数据中寻找出自变量x 和因变量y之间的函数关系y=f(x) 。由于观测数据往往不够准确,因此并不要求y=f(x)经过所有的点 ,而只要求在给定点上误差按照某种标准达到最小,通常采用欧氏范数作为误差量度的标准。这就是所谓的最小二乘法。在MATLAB中实现最小二乘法拟合通常采用polyfit函数进行。
函数polyfit是指用一个多项式函数来对已知数据进行拟合,我们以下列数据为例介绍这个函数的用法:
>> x=0:0.1:1;
>> y=[ -0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2 ]
为了使用polyfit,首先必须指定我们希望以多少阶多项式对以上数据进行拟合,如果我们指定一阶多项式,结果为线性近似,通常称为线性回归。我们选择二阶多项式进行拟合。
>> P= polyfit (x, y, 2)
P=
-9.8108 20.1293 -0.0317
函数返回的是一个多项式系数的行向量,写成多项式形式为:
为了比较拟合结果,我们绘制两者的图形:
>> xi=linspace (0, 1, 100); %绘图的X-轴数据。
>> Z=polyval (p, xi); %得到多项式在数据点处的值。
当然,我们也可以选择更高幂次的多项式进行拟合,如10阶:
>> p=polyfit (x, y, 10);
>> xi=linspace (0, 1,100);
>> z=ployval (p, xi);
读者可以上机绘图进行比较,曲线在数据点附近更加接近数据点的测量值了,但从整体上来说,曲线波动比较大,并不一定适合实际使用的需要,所以在进行高阶曲线拟合时,“越高越好”的观点不一定对的。
7.2 符号工具箱及其应用
在数学应用中,常常需要做极限、微分、求导数等运算,MATLAB称这些运算为符号运算。MATLAB的符号运算功能是通过调用符号运算工具箱(Symbolic Math Toolbox)内的工具实现,其内核是借用Maple数学软件的。MATLAB的符号运算工具箱包含了微积分运算、化简和代换、解方程等几个方面的工具,其详细内容可通过MATLAB系统的联机帮助查阅,本节仅对它的常用功能做简单介绍。
7.2.1 符号变量与符号表达式
MATLAB符号运算工具箱处理的对象主要是符号变量与符号表达式。要实现其符号运算,首先需要将处理对象定义为符号变量或符号表达式,其定义格式如下:
格式1: sym (‘变量名’) 或 sym (‘表达式’)
功能: 定义一个符号变量或符号表达式。
例如:
>> sym (‘x’) % 定义变量x为符号变量
>> sym(‘x+1’) % 定义表达式x+1为符号表达式
格式2: syms 变量名1 变量名2 …… 变量名n
功能: 定义变量名1、变量2 ……、变量名 n为符号变量。
例如:
>> syms a b x t % 定义a,b, x,t 均为符号变量
7.2.2 微积分运算
1、极限
格式:limit (f, t, a, ‘left’ or ‘right’)
功能:求符号变量t 趋近a 时,函数f 的(左或右)极限。‘left’ 表示求左极限,‘right’ 表示求右极限,省略时表示求一般极限;a省略时变量t 趋近0; t省略时默认变量为x ,若无x则寻找(字母表上)最接近字母x 的变量。
例如:求极限的命令及结果为:
>> syms x t
>> limit ((1+2*t/x)^(3*x) , x, inf )
ans=
exp(6*t)
再如求函数x / |x| ,当时的左极限和右极限,命令及结果为:
>> syms x
>> limit(x/abs(x), x, 0, ’left’) ans = -1
>> limit(x/abs(x),x, 0, ’right’) ans = 1
2、导数
格式: diff (f,t,n)
功能: 求函数f 对变量 t的n 阶导数。当n省略时,默认 n=1;当t省略时,默认变量x, 若无x时则查找字母表上最接近字母x 的字母。
例如:求函数f=a*x^2+b*x+c对变量 x的一阶导数, 命令及结果为
>> syms a b c x
>> f=a*x^2+b*x+c;
>> diff(f)
ans=
2*a*x+b
求函数f 对变量b的一阶导数(可看作求偏导), 命令及结果为
>> diff(f,b) ans=x
求函数f 对变量x的二阶导数, 命令及结果为
>> diff(f,2) ans=2*a
3、积分
格式: int(f,t,a,b)
功能: 求函数f 对变量 t从a 到b的定积分. 当a和b省略时求不定积分;当t省略时, 默认变量为(字母表上)最接近字母x的变量。
例如:求函数f=a*x^2+b*x+c对变量x不定积分, 命令及结果为
>> syms a b c x
>> f=a*x^2+b*x+c;
>> int(f)
ans=
1/3*a*x^3+1/2*b*x^2+c*x
求函数f 对变量b不定积分, 命令及结果为
>> int(f,b)
ans=
a*x^2*b+1/2*b^2*x+c*b
求函数f 对变量x 从 1到5的定积分, 命令及结果为
>> int(f,1,5)
ans=
124/3*a+12*b+4*c
4、级数求和
格式: symsum (s,t,a,b)
功能:求表达式s中的符号变量t从第a项到第b项的级数和。
例如: 求级数的前三项的和, 命令及结果为
>> symsum(1/x,1,3) ans=11/6
7.2.3 化简和代换
MATLAB符号运算工具箱中,包括了较多的代数式化简和代换功能,下面仅举出部分常见运算。
simplify 利用各种恒等式化简代数式
expand 将乘积展开为和式
factor 把多项式转换为乘积形式
collect 合并同类项
horner 把多项式转换为嵌套表示形式
例如:进行合并同类项执行
>> syms x
>> collect(3*x^3-0.5*x^3+3*x^2)
ans=
5/2*x^3+3*x^2)
进行因式分解执行
>> factor(3*x^3-0.5*x^3+3*x^2)
ans=
1/2*x^2*(5*x+6)
7.2.4 解方程
1、代数方程
格式:solve (f,t)
功能:对变量t 解方程f=0,t 缺省时默认为x 或最接近字母x 的符号变量。
例如:求解一元二次方程f=a*x^2+b*x+c的实根,
>> syms a b c x
>> f=a*x^2+b*x+c;
>> solve (f,x)
ans=
[1/2/a*(-b+(b^2-4*a*c)^ (1/2))]
[1/2/a*(-b-(b^2-4*a*c)^ (1/2))]
2、微分方程
格式:dsolve(‘s’, ’s1’, ’s2’,…, ’x’)
其中s为方程;s1,s2,……为初始条件,缺省时给出含任意常数c1,c2,……的通解;x为自变量,缺省时默认为t 。
例如:求微分方程的通解
>> dsolve(‘Dy=1+y^2’)
ans=
tan(t+c1)
7.3 优化工具箱及其应用
在工程设计、经济管理和科学研究等诸多领域中,人们常常会遇到这样的问题:如何从一切可能的方案中选择最好、最优的方案,在数学上把这类问题称为最优化问题。这类问题很多,例如当设计一个机械零件时如何在保证强度的前提下使重量最轻
或用量最省(当然偷工减料除外);如何确定参数,使其承载能力最高;在安排生产时,如何在现有的人力、设备的条件下,合理安排生产,使其产品的总产值最高;在确定库存时如何在保证销售量的前提下,使库存成本最小;在物资调配时,如何组织运输使运输费用最少。这些都属于最优化问题所研究的对象。
MATLAB的优化工具箱被放在toolbox目录下的optim子目录中,其中包括有若干个常用的求解函数最优化问题的程序。MATLAB的优化工具箱也在不断地完善。不同版本的MATLAB,其工具箱不完全相同。在MATLAB5.3版本中,对优化工具箱作了全面的改进。每个原有的常用程序都重新编制了一个新的程序。除fzero和fsolve外都重新起了名字。这些新程序使用一套新的控制算法的选项。与原有的程序相比,新程序的功能增强了。在MATLAB5.3和6.0版本中,原有的优化程序(除fzero和fsolve外)仍然保留并且可以使用,但是它们迟早会被撤消的。鉴于上述情况,本书将只介绍那些新的常用的几个优化程序。
⑸ 什么是秦九韶算法
秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。在西方被称作霍纳算法。
一般地,一元n次多项式的求值需要经过[n(n+1)]/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。在人工计算时,一次大大简化了运算过程。
把一个n次多项式
改写成如下形式:
求多项式的值时,首先计算最内层括号内一次多项式的值,即
然后由内向外逐层计算一次多项式的值,即
这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。
结论:对于一个n次多项式,至多做n次乘法和n次加法。[2] (当最高次项系数不为1时分别为n次乘法和n次加法 ,当最高次项系数为1时,分别为n-1 次乘法 ,n次加法。)
⑹ horner法则
。。。。。。算法如下。
poly = 0;
poly(i=N; i>=0; i--)
poly = x * poly + A[i];
⑺ 有没有人了解Horner算法的
你的意思是计算
sigma(a(i,j,k)*x^i*y^j*z^k),sigma对i,j,k求和?
我有一个想法,但是和秦九韶的算法不同,显然他的算法更先进。
可以借助空间换取时间。
用递推的方法填表f[m,n,p]使f[i,j,k]=x^i*y^j*z^k
最后求和s=..就可以
这种算法浪费了空间,显然不好。但是可以比较好的完成任务,时间复杂度O(MNP)己经是最低值。
另外可以优化空间,方法类似秦九韶算法。类似滚动数组。其实没有必要。你可以思考一下。先对x的0次方的y^j*z^k求和,它可以拆成多N个任务。这样可以把空间复杂度降至O(1)。不过我认为没有必要
⑻ 求3000字有关数学史的论文
从算法教学管窥中国古代数学史
俞 昕
( 浙江湖州市第二中学 313000)
关于算法的涵义, 人们有着不同的界定. 普
通高中数学课程标准( 实验) 在学生算法目标达
成度上,重在算法思想的理解与应用,界定现代算
法的意义就是解决某一类问题的办法. 确切地说,
就是对于某一类特定的问题,算法给出了解决问
题的一系列(有穷) 操作, 即每一操作都有它的确
定性的意义( 使计算机能够按照它的指令工作) ,
并在有限时间( 有穷步骤)内计算出结果.
普通高中数学课程标准( 实验) 对! 算法部
分∀进行说明时,突出强调! 需要特别指出的是, 中
国古代数学中蕴涵了丰富的算法思想∀. 吴文俊
先生曾经说过! 我们崇拜中国传统数学,决非泥古
迷古、 为古而古. 复古是没有出路的. 我们的目的
不仅是要显示中国古算的真实面貌, 也不仅是为
了破除对西算的盲从,端正对中算的认识,我们主
要的也是真正的目的, 是在于古为今用. ∀算法教
学中蕴涵着丰富的数学史教育价值, 作为新时代
的高中数学教师是有必要了解这一点的.
1 中国古代数学的特点
古代数学思想分为两大体系, 一个是以欧几
里得的几何原本 为代表的西方数学思想体系,
这个体系以公理化的思想、 抽象化的方法、 封闭的
演绎体系为特色. 另一个则是以我国的九章算
术 为代表的东方数学思想体系,这个体系以算法
化的思想、 构造性的方法、 开放的归纳体系为特
色.我国传统数学在从问题出发,以解决问题为主
旨的发展过程中, 建立了以构造性与机械化为其
特色的算法体系, 这与西方数学以欧几里得几何
原本 为代表的所谓公理化演绎体系正好遥遥
相对.
中国古代数学中的! 术∀相当于现代数学术语
中的! 公式∀,两者虽有相同点(都可以用来解决一
类有关问题) , 其差异也非常之大. 主要表现在,
! 公式∀只提供了几个有关的量之间的关系, 指明
通过哪些运算可由已知量求出未知量,但并没有
列出具体的运算程序,一般地,认为这种程序是已
知的了. 但! 术∀则由怎样运算的详细程序构成的,
可以说它是为完成公式所指出的各种运算的具体
程序,即把! 公式∀展开为使用某种计算工具的具
体操作步骤. 从这点看, ! 术∀正是现代意义上的算
法, 是用一套! 程序语言∀所描写的程序化算法,可
以照搬到现代计算机上去. 我国古代数学包括了
今天初等数学中的算术、 代数、 集合和三角等多方
面的内容.由于受实用价值观的影响, 中国传统数
学的研究遵循着一种算法化思想,这种思想从九
章算术 开始一直是中国古代数学着作大都沿袭
的模式:
实际问题# # # 归类# # # 筹式模型化# # # 程序化算法
即将社会生产生活中的问题,先编成应用问题,按
问题性质分类, 然后概括地近似地表述出一种数
学模型, 借助于算筹, 得到这一类问题的一般解
法. 把算法综合起来, 得到一般原理, 分别隶属于
各章,人们按照书中的方法、 原理和实例来解决各
种实际问题. 可以说,中国传统数学以确定算法为
基本内容,又以创造和改进算法为其发展的方向.
受九章算术 的影响,在之后的几个世纪,一
些数学家的着作都以算法为主要特点,包括王孝
通的辑古算经 、 贾宪的黄帝九章算法细草 、 刘
益的议古根源 、 秦九韶的数书九章 、 李冶的
测圆海镜 和益古演段 、 杨辉的详解九章算
法 、 日用算法 和杨辉算法 , 这些着作中包括
了增乘开方术、 贾宪三角、 高次方程数值解法、 内
插法、 一次同余式组解法等一些着名的算法,进一
步发展了中国古代数学算法化的特点,使得算法
的特点得到了进一步的强化和发展.
1 1 中国古代数学的算法化思想
算法化的思想是中国古代数学的重要特点,
并贯穿于中国古算整个发展过程之中.即使是与
24 数学通报 2010 年 第49 卷 第2 期图形有关的几何问题也不例外,中算家们将几何
方法与算法有机地结合起来,实现了几何问题的
算法化.这样,从问题出发建立程序化的算法一直
是古代中国数学研究的传统,也是中算家们努力
的方向.这种算法化的思想着重构造实践,更强调
! 经验∀、 ! 发现∀和构造性思维方式下从无到有的
发明,对今天的算法教学与研究具有重要的启迪
作用.
中国古代数学算法化的思想具体表现如下:
第一步,把实际中提出的各种问题转化为数学模
型;第二步,把各种数学模型转化为代数方程; 第
三步,把代数方程转化为一种程序化的算法; 第四
步,设计( 并逐步改进)、 归纳、 推导(寓推理于算法
之中)出各种算法; 第五步,通过计算回溯逐步达
到解决原来的问题.
1 2 中国古代数学的构造性方法
所谓构造性方法是解决数学问题的一种方
法,是创造性思维方式直接作用的结果.按照现代
直觉主义者,特别是构造主义者的观点,对于一个
数学对象,只有当它可以通过有限次的操作而获
得,并且在每步操作之后都能有效地确定下一步
所需要采取的操作, 才能说它是存在的.按照这种
思维方式,可以使概念和方法按固定的方式在有
限步骤内进行定义或得以实施,或给出一个行之
有效的过程使之在有限步骤内将结果确定地构造
出来.换言之,就是能用有限的手段刻画数学对象
并针对问题提出具体的解法.
中国古代数学的算法化思想与构造性的方法
紧密相连.由于古代中算家所关心的大多是较为
实用的问题,他们在解决问题时首先考虑是如何
得到可以直接应用的、 可以方便操作的解,而不会
满足于仅仅知道解在理论上的存在性. 因为这种
纯粹的理论解对于受实用价值观影响的中算家来
说是没有多大意义的.从而我们推断,构造性方法
的产生是算法化思想直接作用的结果.
从我国许多经典算书中可以发现, 数学构造
性方法在算法中有许多精彩的体现. 例如就! 方
程∀的筹算图阵及其程序设计而言,首先, ! 群物总
杂,各列有数,总言其实∀,这是对每行中未知数的
系数和常数项的安排,其次, ! 令每行为率,二物者
再程,三物者三程,皆如物数程之∀,这是对诸行关
系的安排, ! 并列为行∀又说明了什么叫! 方程∀. 这
为中国古代数学的构造性方法提供了一个具有说
服力的样板.
由于构造性的方法特别强调运算的可操作程
度, 所以构造出的! 术∀可以通过一系列有限的运
算求出解来, 具有一般性.时至今日我国古算家所
设计的许多算法几乎都可以整套照搬到现代的电
子计算机上实现.这也是我国古算在算法上长期
居于领先地位的一个重要原因.
2 中国古代数学中的优秀算法案例
2. 1 中国古代的代数学
代数学是中国传统数学中一个值得骄傲和自
豪的领域.中小学数学中的算术、 代数内容, 从记
数以至解联立的线性方程组, 实质上都是中国古
代数学家的发明创造.结合新课程的算法教学,笔
者选取我国古代着名算法进行分析.
2. 1. 1 求最大公约数的算法(更相减损术)
中国古代数学中,未曾出现素数、 因数分解等
概念,但是发明了求两整数的最大公约数的方
法# # # 更相减损术: ! 可半者半之,不可半者,副置
分母子之数, 以少减多, 更相减损,求其等也.以等
数约之. ∀事实上此术中包含了三个步骤:
第一步, ! 可半者半之∀, 即进行观察, 若分子、
分母都是偶数,可先取其半;
第二步, ! 不可半者, 副置分母、 子之数, 以少
减多,更相减损,求其等也∀;
第三步, ! 以等数约之∀.
其中第二步! 以少减多, 更相减损∀是关键,又
是典型的机械化程序.在中国古代数学中, 将最大
公约数称作! 等∀.由于! 更相减损∀过程终可以在
有限步骤内实现, 所以它是一种构造性的方法.若
用现代语言翻译即为:第一步,任意给定两个正整
数, 判断它们是否都是偶数. 若是,用2 约减,若不
是, 执行第二步. 第二步, 以较大的数减去较小的
数, 接着把所得的差与较小的数比较, 并以大数减
小数.继续这个操作, 直到所得的数相等为止, 则
这个数( 等数)或这个数与约简的数的乘积就是所
求的最大公约数.下面运用 QBA SIC 语言来编写
相应的程序( 见程序1) .
25 2010 年 第49 卷 第2 期 数学通报程序 1
INPUT! m, n= ∀ ; m, n
IF m< n T HEN
a= m
m= n
n= a
END IF
k= 0
WHILE m MOD 2= 0 AND n MOD2= 0
m= m/ 2
n= n/ 2
k= k+ 1
WEND
d= m- n
WHILE d< > n
IF d> n TH EN
m= d
ELSE
m= n
n= d
END IF
d = m- n
WEND
d= 2 ∃ k * d
PRINT d
END
程序 2
INPUT A, B
WHILE A < > B
IF A> B T H EN
A = A- B
ELSE
B= B - A
END IF
WEND
PRINT B
END
程序 3
INPUT ! M, N (M> N )∀ ; M, N
DO
R= M- N
IF R> N TH EN
M= R
ELSE
M= N
N= R
END IF
LOOP UNTIL R= 0
PRINT M
END
程序 4
INPUT ! n= ∀ ; n
INPUT! an= ∀; a
INPUT! x= ∀ ; x
v= a
i= n- 1
WH ILE i> = 0
PRINT ! i= ∀; i
INPUT! ai= ∀ ; a
v= v * x+ a
i= i- 1
WEND
PRINT v
END
程序 2和 3 是两个简化的参考程序, 是从不
同的角度来实现更相减损的过程.
! 更相减损术∀提供了一种求两数最大公约数
的算法, 这是九章算术 的一个重要成就, 与古希
腊欧几里得的几何原本 中用来求最大公约数的
! 欧几里得算法∀, 即辗转相除法, 有异曲同工之
妙. 欧几里得在几何原本 中针对这个问题引入
了许多概念, 给出了冗长的逻辑证明. 尽管如此,
他还是暗用了一条未加说明的公理, 即如果 a, b
都被c 整除, 则a- mb也能被c 整除.中国古算采
用的! 更相减损∀方法,实际上也暗用了一条未加
说明的公理, 即若 a- b 可以被c 整除,则 a, b 都
能被c 整除. 正如刘徽在九章算术注 中! 其所以
相减者, 皆等数之重叠∀. 从形式上看! 更相减损
术∀比! 辗转相除法∀更复杂, 循环次数要比辗转相
除法多, 但对于计算机来说, 作乘除运算要比作加
减运算慢得多, 因此更相减损术在计算机上更为
好用.
26 数学通报 2010 年 第49 卷 第2 期2. 1. 2 求一元 n 次多项式值的算法(秦九韶算
法)
秦九韶,南宋着名数学家,其学术思想充分体
现在数书九章 这一光辉名着中,该着作不仅继
承了九章算术 的传统模式, 对中算的固有特点
发扬光大,而且完全符合宋元社会的历史背景, 是
中世纪世界数学史上的光辉篇章. 书中记载了! 正
负开方术∀、 ! 大衍求一术∀等着名算法.
在数书九章 卷五第 17 个问题以! 尖田求
积∀为例的算法程序中,可以看出秦九韶对于求一
元n 次多项式f ( x ) = anx
n
+ an- 1 x
n- 1
+ %+ a1x
+ a0 的值所提出的算法.秦九韶算法的特点在于
通过反复计算n 个一次多项式,逐步得到原多项
式的值. 在欧洲, 英国数学家霍纳( Horner ) 在
1819 年才创造了类似的方法, 比秦九韶晚了572
年.秦九韶算法把求f ( x ) = anx
n
+ an- 1 x
n- 1
+ %
+ a1x + a0 的 值 转 化 为 求 递 推 公 式
v0= an
vk= vk- 1x+ an- k k= 1, 2, %, n
中 v n 的值. 通
过这种转化, 把运算的次数由至多( 1+ n) n
2
次乘
法运算和n 次加法运算,减少为至多 n 次乘法运
算和n 次加法运算,大大提高了运算效率.这种算
法的QBASIC 语言程序如程序 4 所示.算法步骤
是如下的五步: 第一步, 输入多项式次数 n、 最高
次项的系数an 和x 的值;第二步,将 v 的值初始
化为a v ,将i 的值初始化为n- 1; 第三步, 输入 i
次项的系数ai ;第四步, v= v x+ ai , i= i- 1; 第五
步,判断i 是否大于或等于 0, 若是, 则返回第三
步,否则输出多项式的值v .
2. 2 中国古代的几何学
中国古代的几何学从田亩丈量等生产生活中
的一些实际问题中产生, 并为生产生活服务. 基于
传统实用价值观的影响, 中国古代的几何学并没
有发展成为像欧氏几何那样严密的公理化演绎体
系,所以中国古代几何学在整个数学史上的地位
并不突出,但在许多几何问题的处理上也突出了
算法化这一特色. 下面以! 割圆术∀为例作简要
分析.
中国古代数学家刘徽创立! 割圆术∀来求圆的
面积及其相关问题. 刘徽! 瓤而裁之∀,即对与圆周
合体的正多边形进行无穷小分割,分成无穷多个
以正多边形每边为底、 圆心为顶点的小等腰三角
形, 这无穷多个小三角形的面积之和就是圆的面
积. 这样通过对直线形的无穷小分割, 然后求其极
限状态的和的方式证明了圆的面积公式.刘徽的
算法! 割之弥细,所失弥少,割之又割, 以至于不可
割, 则与圆合体而无所失矣∀体现出程序化的过
程, 可以看出圆内接正多边形逐渐逼近圆的变化
趋势,并且刘徽依此开创了求圆周率精确近似值
的方法, 将这种极限思想用于近似计算.其中包含
有迭代过程和子程序,是一种典型的循环算法,充
分体现了程序化的特点.
中算家的几何学,并不追求逻辑论证的完美,
而是着重于实际计算问题的解决, ! 析理以辞, 解
体用图∀, 以建立解决问题的一般方法和一般原
则. 但另一方面,这种几何学又是以面积、 体积、 勾
股相似等为基本概念,以长方形面积算法、 长方形
体积算法、 相似勾股形的性质为出发点的, 整个几
何理论建立在! 出入相补原理∀等基本原理之上.
例如,由勾股定理自然地引起平方根的计算问题,
而求平方根和立方根的方法, 其步骤就是以出入
相补原理为几何背景逐步索骥而得.这方面内容
的介绍, 不仅可以丰富学生的算法知识,而且可以
通过揭示蕴藏其中的数学背景和文化内涵, 激发
学生学习算法的兴趣,体会算法在人类发展史中
的作用.
3 中国古代数学算法的教学价值
3. 1 培养正确数学观的良好平台
中国传统算法尽管与现代算法在具体形式上
差别很大,但是重要的是形式后面的认识论发展
线索可以为现代算法教学的体系、 教学层次提供
依据.它的具体数学知识载体也是现代算法教学
的重要源泉. 各种算法的创立就是创造性劳动的
产物,即是创造思维的一种! 凝固∀和! 外化∀. 其
次, 通过把一部分问题的求解归结为对于现成算
法的! 机械应用∀, 这就为人们积极地去从事新的
创造性劳动提供了更大的可能性. 从而算法化也
就意味着由一个平台向更高点的跳跃.
吴文俊先生的研究使中国传统数学的算法重
见天日, 开拓了数学机械化的新领域, 吴先生提出
! 数学教育的现代化就是机械化∀.他在研究中这
样写道: 数学问题的机械化, 就要求在运算和证明
过程中, 每前进一步之后,都有一个确定的必须选
27 2010 年 第49 卷 第2 期 数学通报择的下一步, 这样沿着一条有规律的, 刻板的道
路,一直达到结论.证明机械化的实质在于, 把通
常数学证明中所固有的质的困难,转化为计算的
量的复杂性.计算的量的复杂性在过去是人力不
可能解决的,而计算机的出现解决了这种复杂性.
吴先生的理论和实践已经表明,证明和计算是数
学的两个方面, 且又是统一的,这在数学教育中具
有重要意义.我们应当引导学生了解古人对问题
思考的角度,学会站在巨人的肩膀上,比如按照中
国古代开方术的思路就可以编造程序在现代计算
机上实现开方.
培养学生在学习数学知识的同时更多地关心
所学知识的社会意义和历史意义,力图在面向未
来的同时,通过同传统上的哲学、 历史和社会学的
思想结合起来, 形成正确的数学观.算法教学就为
此搭建了一个良好的平台, 并且承载丰富的历史
底蕴.
3. 2 渗透爱国主义教育的最佳契机
与西方相比, 中算理论具有高度概括与精练
的特征, 中算家经常将其依据的算理蕴涵于演算
的步骤之中, 起到! 不言而喻, 不证自明∀的作用,
可以认为中国传统数学乃是为建立那些在实际中
有直接应用的数学方法而构造的最为简单, 精巧
的理论建筑物. 因此, 中算理论可以说是一种! 纲
目结构∀:目是组成理论之网的眼孔;纲是联结细
目的总绳.以术为目, 以率为纲,即是依算法划分
理论单元,而用基本的数量关系把它们连结成一
个整体. 纲举目张,只有抓住贯串其中的基本理论
与原理, 才能看清算法的来龙去脉.下面是吴文俊
先生总结的! 关于算术代数部分发明创造的一张
中外对照表∀.
从算法教学管窥中国古代数学史
中国 外国
位值制十进位记 最迟在九章算术 成书时已十分成熟 印度最早在 6 世纪末才出现
分数运算 周髀算经 中已有, 在九章算术 成
书时已成熟 印度最早在 7 世纪才出现
十进位小数 刘徽注中引入, 宋秦九韶 1247年时已
通行 西欧 16 世纪时始有之, 印度无
开平方、 立方 周髀算经 中已有开平方, 九章算
术 中开平、 立方已成熟
西方在 4 世纪末始有开平方, 但还无开立方, 印度
最早在 7 世纪
算术应用 九章算术 中有各种类型的应用问题 印度 7 世纪后的数学书中有某些与中国类似的问
题与方法
正负数 九章算术 中已成熟 印度最早见于 7 世纪,西欧至 16 世纪始有之
联立一次方程组 九章算术 中已成熟 印度 7 世纪后开始有一些特殊类型的方程组, 西
方迟至 16 世纪始有之
二次方程 九章算术 中已隐含了求数值解法,
三国时有一般解求法 印度在 7 世纪后,阿拉伯在 9世纪有一般解求法
三次方程 唐初( 公元 7 世纪初) 有列方程法, 求
数值解已成熟
西欧至 16 世纪有一般解求法, 阿拉伯 10 世纪有
几何解
高次方程 宋时( 12 # 13 世纪)已有数值解法 西欧至 19 世纪初始有同样方法
联立高次方程组与消元法 元时( 14 世纪初) 已有之 西欧甚迟,估计在 19 世纪
28 数学通报 2010 年 第49 卷 第2 期3. 3 品位数学美学思想的美妙境界
中国古代数学不但具有实用性特征, 还蕴涵
着丰富的美学思想. 比如九章算术 中列方程的
方式,相当于列出其增广矩阵,其消元过程相当于
矩阵变换,而矩阵是数学美学方法中对称最典型
的表现形式之一; 九章算术 中用几何方法巧妙
地解决了很多代数问题, 这是数形结合的统一: 把
数学问题改编成歌诀,以便于掌握和传授,这是文
学艺术与数学的统一. 总之, 在算法教学中, 应努
力把握和利用自己文化传统中的积极因素进行教
学,这对数学教育的发展具有重要的意义.
参考文献
1 中学数学课程教材研究开发中心. 普通高中课程标准实验教
材书(数学) [ M] . 北京: 人民教育出版社, 2007
2 中华人民共和国教育部. 普通高中数学课程标准(实验) [ M] .
北京: 人民教育出版社, 2003
3 李文林. 数学史概论(第二版) [ M ] . 北京: 高等教育出版
社, 2002
4 王鸿钧, 孙宏安. 中国古代数学思想方法[ M] . 南京: 江苏教育
出版社, 1988
5 张维忠. 数学, 文化与数学课程[ M] . 上海: 上海教育出版
社, 1999
6 吴文俊. 吴文俊论数学机械化[ M ] . 济南: 山东教育出版
社, 1995
7 代钦. 儒家思想与中国传统数学[ M] . 北京: 商务印书馆, 2003
8 费泰生. 算法及其特征[ J] . 数学通讯, 2004, 7
9 张奠宙. 算法[ J] . 科学, 2003, 55( 2)
10 李建华. 算法及其教育价值[ J ] . 数学教育学报, 2004, 3
11 李亚玲. 算法及其学习的意义[ J ] . 数学通报, 2004, 2
(上接第23 页) 实验教师对课改实验进行探索、 总
结、 反思、 调整, 推广比较成熟的经验,同时纠正实
验过程中的偏颇与极端行为,教学过程逐步进入
新的稳定阶段.教学过程逐步过渡到以问题为主
线、 以活动为主线的! 无环节∀模式.
( 2)受不同的教学理念影响, 教师角色、 学生
角色、 教学目标、 教学过程关注点等方面, 在教学
过程中有很大差异.
教师角色 学生角色 教学目标 教学过程关注
领导者
(权威)
接 受 者
(被动)
让 学 生 掌
握 数 学 知
识技能
知识 引入, 讲 解
本质, 巩固练习
主导者
(决定)
观 察 者
(协助)
让 学 生 观
摩 数 学 产
生过程
展示 过程, 注 重
建构, 强化训练
引导者
(组织)
参 与 者
(主动)
让 学 生 参
与 探 究 数
学 生 成 过
程
问题 情境, 提 出
问题, 学生活动
( 3) 2004 年高中数学课程改革后, 课堂教学
发生一定的变化,广泛地进行! 创设情境∀! 提出问
题∀!引导学生探究探索∀, 出现了以! 问题主线∀、
! 活动主线∀为主的课堂, 出现了! 问题情境学生
活动建立数学运用数学同顾反思∀的整体课堂
构思.这些改变对于揭示数学的内在本质, 发展学
生的思维能力起到积极的作用.
( 4) 由于受多种因素制约(特别是高考) ,与初
中相比, 本次课改后高中数学课堂教学变化幅度
不大,近半数的课堂教学模式仍然以五环节为主.
对于课改倡导的教学理念, 只是渗透在传统的教
学模式中,目前高中数学课堂教学改革的力度、 深
度与课改的预期目标还有一定的距离.我们看到
2008 年的赛课教案的创新、 探索力度, 远没有
1990 年的名师授课录 大, 那时还没有明确提出
课改理念,但他们却进行积极的探索, 关注学生主
体. 而今天,课改的理念已经系统培训 5 年, 许多
教师仍停留在形式层面,未能变成自觉的行为.
参考文献
1 李善良. 我国数学教学设计的探索与评析# # # 兼及十年初中
数学教师说课评比活动[ J ] . 中国数学教育(初中版) , 2007, 9
2 编委会. 名师授课录(中学数学高中版) [ M] , 上海教育出版
社, 1991
3 2000 年全国首届高中青年数学教师优秀课观摩与评比的教
案(会议资料)
4 2008 年全国第四届高中青年数学教师优秀课观摩与评比的
教案(会议资料)
5 李善良. 关于数学教学中问题的设计[ J] . 高中数学教与学,
2008, 1
29 2010 年 第49 卷 第2 期 数学通报
⑼ 简述中国数学发展史上三个高峰时期,并谈谈中国古代数学的特色与局限.
中国数学发展的高峰
唐朝亡后,五代十国仍是军阀混战的继续,直到北宋王朝统一了中国,农业、手工业、商业迅速繁荣,科学技术突飞猛进.从公元十一世纪到十四世纪﹝宋、元两代﹞,筹算数学达到极盛,是中国古代数学空前繁荣,硕果累累的全盛时期.这一时期出现了一批着名的数学家和数学着作,列举如下:贾宪的《黄帝九章算法细草》﹝11世纪中叶﹞,刘益的《议古根源》﹝12世纪中叶﹞,秦九韶的《数书九章》﹝1247﹞,李冶的《测圆海镜》﹝1248﹞和《益古演段》﹝1259﹞,杨辉的《详解九章算法》﹝1261﹞、《日用算法》﹝1262﹞和《杨辉算法》﹝1274-1275﹞,朱世杰的《算学启蒙》﹝1299﹞和《四元玉鉴》﹝1303﹞等等.宋元数学在很多领域都达到了中国古代数学,也是当时世界数学的巅峰.其中主要的工作有:
公元1050年左右,北宋贾宪(生卒年代不详)在《黄帝九章算法细草》中创造了开任意高次幂的“增乘开方法”,公元1819年英国人霍纳(william george horner)才得出同样的方法.贾宪还列出了二项式定理系数表,欧洲到十七世纪才出现类似的“巴斯加三角”.(《黄帝九章算法细草》已佚)
公元1088—1095年间,北宋沈括从“酒家积罂”数与“层坛”体积等生产实践问题提出了“隙积术”,开始对高阶等差级数的求和进行研究,并创立了正确的求和公式.沈括还提出“会圆术”,得出了我国古代数学史上第一个求弧长的近似公式.他还运用运筹思想分析和研究了后勤供粮与运兵进退的关系等问题.
公元1247年,南宋秦九韶在《数书九章》中推广了增乘开方法,叙述了高次方程的数值解法,他列举了二十多个来自实践的高次方程的解法,最高为十次方程.欧洲到十六世纪意大利人菲尔洛(scipio del ferro)才提出三次方程的解法.秦九韶还系统地研究了一次同余式理论.
公元1248年,李冶(李治,公元1192一1279年)着的《测圆海镜》是第一部系统论述“天元术”(一元高次方程)的着作,这在数学史上是一项杰出的成果.在《测圆海镜?序》中,李冶批判了轻视科学实践,以数学为“九九贱技”、“玩物丧志”等谬论.
公元1261年,南宋杨辉(生卒年代不详)在《详解九章算法》中用“垛积术”求出几类高阶等差级数之和.公元1274年他在《乘除通变本末》中还叙述了“九归捷法”,介绍了筹算乘除的各种运算法.公元1280年,元代王恂、郭守敬等制订《授时历》时,列出了三次差的内插公式.郭守敬还运用几何方法求出相当于现在球面三角的两个公式.
公元1303年,元代朱世杰(生卒年代不详)着《四元玉鉴》,他把“天元术”推广为“四元术”(四元高次联立方程),并提出消元的解法,欧洲到公元1775年法国人别朱(etienne bezout)才提出同样的解法.朱世杰还对各有限项级数求和问题进行了研究,在此基础上得出了高次差的内插公式,欧洲到公元1670年英国人格里高利(james gregory)和公元1676一1678年间牛顿(issac newton)才提出内插法的一般公式.
公元十四世纪我国人民已使用珠算盘.在现代计算机出现之前,珠算盘是世界上简便而有效的计算工具.
中国数学的特点与局限
(1)以算法为中心,属于应用数学.中国数学不脱离社会生活与生产的实际,以解决实际问题为目标,数学研究是围绕建立算法与提高计算技术而展开的.
(2)具有较强的社会性.中国传统数学文化中,数学被儒学家培养人的道德与技能的基本知识---六艺(礼、乐、射、御、书、数)之一,它的作用在于“通神明、顺性命,经世务、类万物”,所以中国传统数学总是被打上中国哲学与古代学术思想的烙印,往往与术数交织在一起.同时,数学教育与研究往往被封建政府所控制,唐宋时代的数学教育与科举制度、历代数学家往往是政府的天文官员,这些事例充分反映了这一性质.
(3)寓理于算,理论高度概括.由于中国传统数学注重解决实际问题,而且因中国人综合、归纳思维的决定,所以中国传统数学不关心数学理论的形式化,但这并不意味中国传统仅停留在经验层次而无理论建树.其实中国数学的算法中蕴涵着建立这些算法的理论基础,中国数学家习惯把数学概念与方法建立在少数几个不证自明、形象直观的数学原理之上,如代数中的“率”的理论,平面几何中的“出入相补”原理,立体几何中的“阳马术”、曲面体理论中的“截面原理”(或称刘祖原理,即卡瓦列利原理)等等.
中国数学对世界的影响
数学活动有两项基本工作----证明与计算,前者是由于接受了公理化(演绎化)数学文化传统,后者是由于接受了机械化(算法化)数学文化传统.在世界数学文化传统中,以欧几里得《几何原本》为代表的希腊数学,无疑是西方演绎数学传统的基础,而以《九章算术》为代表的中国数学无疑是东方算法化数学传统的基础,它们东西辉映,共同促进了世界数学文化的发展.
中国数学通过丝绸之路传播到印度、阿拉伯地区,后来经阿拉伯人传入西方.而且在汉字文化圈内,一直影响着日本、朝鲜半岛、越南等亚洲国家的数学发展.