中国古代算法案例
更相减损术
a b r a br
依据
设a, b的最大公约数是 k , 则a k p; b k q;
a, b
a与b的差r k ( p q),显然k可以被r整除。
得 a, b 与
b, r 有相同的公约数
如何使用
求16与12的最大公约数。 (16,12)-->(4,12)-->(4,8) -->(4,4)
第三,S2n近似等于圆面积。
下面的关键是找出正n边形的面积与正2n 边形的面积之间的关系,以便递推。
设圆的半径为1,正n边形
的边长AB为xn,弦心距OG 为hn;面积为Sn,根据勾股 定理,得:
xn hn 1 , 2
2 xn x2 n 1 hn 2 2 2
否
是
k=k-1
f=f*x +ak
输出S
结束
Scilab语言:
x=input("x="); n=input("n="); result=input("The first xishu"); for i=1 : 1 : n a=input("xishu: "); result=result*x+a; end disp(result,"The result is:");
已知一个一元n次多项式函数: P(x)=anxn+an-1xn-1+……+a1x+ao
当知道x值时,我们可以按顺序一项一项的计算, 然后相加,求出P(x)
设有n+1项的n次函数,即:
将前n项提取公因数x ,得:
再将括号内的前n-1项提取公因数x,得:
如此反复提取公因数x
,最后将函数化为:
令
......
中国古代数学中的算法案例
最大公约数
定 义
如果有一个自然数a能被自然数b整除, 则称a为b的倍数,b为a的约数。几个自 然数公有的约数,叫做这几个自然数的 公约数。公约数中最大的一个公约数, 称为这几个自然数的最大公约数。
求得最大公约数的方法
• 辗转相除法 (欧几里得算法) • 更相减损术 (出自《九章算术》)
《数书九章》在数学内容上颇多创新。中国算筹式记数 法及其演算式在此得以完整保存;自然数、分数、小数、负 数都有专条论述,还第一次用小数表示无理根的近似值;卷 1大衍类中灵活运用最大公约数和最小公倍数,并首创连环 求等,借以求几个数的最小公倍数;在《孙子算经》中“物 不知数”问题的基础上总结成大衍求一术,使一次同余式组 的解法规格化、程序化,比西方高斯创用的同类方法早500 多年,被公认为“中国剩余定理此外,秦九韶还改进了一次 方程组的解法,用互乘对减法消元,与现今的加减消元法完 全一致。
n=input("n="); //输入多项式次数 a=zeros(1,n+1); //定义带下标的变量 for i=1:1:n+1 a(i)=input("a(i)="); //顺次输入系数a0,a1,...,an end x=input("x="); //输入自变量的值 y=a(n+1); for i=1:1:n y=y*x+a(n+1-i); end y
这种计算方法,称之为秦九韶方法。直到今 天,这种算法仍是世界上多项式求值的最先进的 算法。其最大的意义在于将求n次多项式的值转化 为求n个一次多项式的值。在人工计算时,利用秦 九韶算法和其中的系数表可以大幅简化运算;对 于计算机程序算法而言,加法比乘法的计算效率 要高很多,所以此算法极大地缩短了CPU运算时 间。源自算法表示
S1:输入两个正数a,b(a>b) ; S2:如果a≠b,则执行S3,否则转到S5; S3:将a-b的值赋予r; S4:若b>r,则把b赋予a,把r赋予b,否则把 r赋予a,重新执行S2; S5:输出最大公约数b.
开始 输入a,b
a=a-b Y a≠b N 输出b Y a>b
(n 6)
容易知道x6=1,
正2n边形的面积等于正n 边形的面积加上n个等腰三 角形的面积,即 1 S 2 n S n n xn (1 hn ) (n 6) 2 3 于是由 S6 6 求得S12=3; 4
S24≈3.105828;„„
按照这样的思路, 刘徽把圆内接正多 边形的面积一直算 到了正3072边形, 并由此而求得了圆 周率 为3.14和 3.1416 这两个近似数值。 这个结果是当时世 界上圆周率计算的 最精确的数据。
谢谢观赏
Thanks for listening!
刘徽形容他的“割圆术” 说:割之弥细,所失弥少, 割之又割,以至于不可割, 则与圆合体,而无所失矣。 简单来说所谓“割圆 术”,是用圆内接正多边 形的周长去无限逼近圆周 并以此求取圆周率的方法。
计算方法
第一,从半径为1的圆内接正六边形开始, 计算它的面积S6; 第二,逐步加倍圆内接正多边形的边数, 分别计算圆内接正十二边形,正二十四 边形,正四十八边形,…的面积,到一 定的边数(设为2m)为止,得到一列递 增的数, S6,S12,S24,S48,…,S2n.
则: fn即为所求
怎样用程序框图表示秦九韶算法 ?
观察秦九韶算法的数学模型,计算vk时 要用到fk-1的值,若令f0=an,我们可以得 到下面的递推公式: f0=an fk=fk-1· x+an-k (k=1, 2, „, n) 这是一个在秦九韶算法中反复执行的 步骤,可以用循环结构来实现。
开始 输入x,n;a0,a1,a2,…,an k=n, f=an k>0
程序编写
n=6; x=1; s=6*sqrt(3)/4; for i=1 : 1 : 5 h=sqrt(1-(x/2)^2); s=s+n*x*(1-h)/2; n=2*n; x=sqrt((x/2)^2+(1- h)^2); end print(%io(2), n, s)
秦九韶(1208年-1261年) 南宋官员、数学家,与李冶、杨辉、 朱世杰并称宋元数学四大家。字道 古,汉族,自称鲁郡(今山东曲阜) 人,生于普州安岳(今属四川)。 精研星象、音律、算术、诗词、弓 剑、营造之学,历任琼州知府、司 农丞,后遭贬,卒于梅州任所,著 作《数书九章》,其中的大衍求一 术、三斜求积术和秦九韶算法是具 有世界意义的重要贡献。
b=b-a N
结束
程序: a=input(“a=”); b=input(“b=”); while a<>b if a>=b a=a-b; else b=b-a; end end print(%io(2), b, “两数的最大公约数
割圆术
早在我国先秦时期,《墨经》上就已 经给出了圆的定义。我国古代数学经 典《九章算术》在第一章“方田”章 中写到“半周半径相乘得积步”,也 就是我们现在所熟悉的公式。 为了证明这个公式,我国魏晋时期数 学家刘徽写了一篇1800余字的注记, 这篇注记就是数学史上著名的“割圆 术”。