用Python实现割圆术算法

2019-03-20 12:30刁乾坤
数学学习与研究 2019年2期
关键词:圆周率算法

刁乾坤

【摘要】 圆周率是人类获得的最古老的数学概念之一.3世纪中期,魏晋时期的数学家刘徽[1]首创割圆术,为计算圆周率建立了严密的理论和完善的算法,所谓割圆术,就是不断倍增圆内接正多边形的边数求出圆周率的方法.本文将通过Python语言,在JUPYTER NOTEBOOK中实现割圆术算法.

【关键词】 圆周率;割圆术;算法

主要仪器设备JUPYTER NOTEBOOK PYTHON 3.

设半径为1的圆的边数为6·2n的内接正多边形边长为an,如图所示,其中,AC= an 2 ,AD=a2n,OD=1,OC= 1-  an 2  2 ,AD2=AC2+CD2=AC2+(OD-OC)2,

则a2n=   an 2  2+ 1- 1-  an 2  2  2 = 2- 4-a2n  .

相应的△AOD面积为:Sn+1= 1 2 OD·AC.

所以,π≈6·2n+1·Sn+1,

程序代码

import numpy as np

def liuhui(n):

a=np.zeros(n+2)

a[0]=1

for k in range(n+1):

a[k+1]=np.sqrt(2-np.sqrt(4-a[k]**2))

return(print(′圓的内接正6*2^n边形的边长为:′,a[n]),print(′圆周率的近似值为:′,3*2**n*a[n]))

Python中π的参考值为3.141592653589793.

运算结果为:

n 正多边形边长 正多边形边数 圆周率近似值

0 1.0 6 3.0

1 0.517638090205 12 3.10582854123

2 0.26105238444 24 3.13262861328

3 0.13080625846 48 3.13935020305

4(刘徽) 0.0654381656436 96 3.14103195089

5 0.032723463253 192 3.14145247229

6 0.0163622792079 384 3.14155760791

7 0.00818120805247 768 3.14158389215

8 0.00409061258234 1536 3.14159046324

9 0.00204530736071 3072 3.14159210604

10 0.00102265381399 6144 3.14159251659

11(祖冲之) 0.000511326923607 12288 3.14159261864

12 0.000255663463975 24576 3.14159264532

13 0.000127831731987 49152 3.14159264532

结果分析:刘徽利用正96边形算得圆周率小数点后3位精确数字;祖冲之利用正12288边形算得圆周率小数点后7位精确数字.在数学上,祖冲之推算出圆周率的真值应该介于3.1415926和3.1415927之间,比欧洲要早一千多年.

【参考文献】

[1]郭书春.中国古代数学[M].北京:商务印书馆,1997:164.

猜你喜欢
圆周率算法
说说圆周率
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
关于圆周率,你可能不知道这些
进位加法的两种算法
“好玩”的圆周率的好伙伴
基于增强随机搜索的OECI-ELM算法
一种改进的整周模糊度去相关算法
π传奇