万物拓展在新江湾城开设的线下小班课,是以少儿编程课为核心,融合了计算机、天文、地理和物理等多种学科的综合性课程。
万物所有课程的设计都讲求拓展和互联,尤其是与校内基础学科的融合,Python编程亦是如此。
神奇的π众所周知,圆周率π是?个圆的周?与直径之?,?且不论圆的??,这个?值是常数,永远不变。圆周率的近似值π≈3.14家喻户晓,关于它的?章和书籍更是多不胜数。
讲故事才是激发兴趣的第一要素3月14日,π日,伟大的科学家爱因斯坦在这一天出生,另一位伟大的物理学家霍金在这一天离世。广阔的宇宙像pai一样无限。两位伟人生于凡尘,归于群星。
我国数学家华罗庚,写过一本数学小册子《从祖冲之的圆周率谈起》,其中有一个故事:从前有个教书先生,平日喜欢喝酒。一天,他把学生们关在教室里,要他们背诵圆周率,自己却提了一壶酒到山上的寺庙找老和尚对饮去了。先生回来后,考问学生有没有把圆周率背下来。有个学生就回应道:“山巅一寺一壶酒,尔乐苦煞吾,把酒吃,酒杀尔杀不死,乐尔乐”。
先生开始很生气,以为学生是在讽刺他,但很快便意识到这其实是带浓厚乡音的普通话3.,顿时转怒为喜,把这个学生着实称赞了一番。
π值计算史“谁能把π算的更多位,谁就更厉害”,这揭开了π值计算史。
公元前年前,古希腊科学家阿基米德最先对π值进行系统严格的估算者应当首推古希腊科学家阿基米德(公元前—前年),他得出不等式3+10/71π3+1/7,平均值就是π≈3.14···
公元到年间,刘徽和祖冲之在我国,三国后期魏国人刘徽(生于公元年左右)留下了宝贵的数学遗产《九章算术注》和《海岛算经》,并创始和使用了“割圆术”,即用圆的内接和外切正多边形来逼近圆的周长。
割圆术为后来南北朝时期数学家祖冲之(公元—年)的估算3.π3.提供了最基本的方法。此外,祖冲之还以很简单的分数形式给出了圆周率的约率π≈22/7和密率π≈/。
古人计算圆周率,一般都是用正多边形来逼近圆的。阿基米德用正96边形逼近圆而得到π小数点后3位的精度,刘徽用正边形逼近圆也只能得到π小数点后5位的精度。
由于这些计算方法的效率极低,估算π的历史进程十分缓慢。直到微积分问世以后,情况才大为改观。
年,英国天文学家JohnMachin年,英国天文学家JohnMachin发现了一个简单的解析公式,并用它计算π达到了小数点后位的精确度。
π=16arctan(1/5)?4arctan(1/)。
微积分的出现,不但给出了许多关于π的解析估计,更大大地加快了其数值计算。且不说优雅漂亮的Gregory-Leibniz和差公式
1/1?1/3+1/5?1/7+1/9?···=π/4以及Wallis乘积公式2/1×2/3×4/3×4/5×6/5×6/7×8/7×8/9×···=π/2,
后来发现能够用来对π作快速近似计算的公式还有很多。
,印度传奇数学家拉马努金年,自学成才的传奇印度数学家拉马努金就曾经写下过14个关于π的无穷级数展开公式。
电子计算机出现以后,人类大规模、高精度的计算能力得到了无与伦比的飞跃,使得圆周率计算的进程突飞猛进,实现了计算π的(二进制)数字长度一次又一次重大突破。
年,美国数学家BillGosper年,美国数学家BillGosper用拉马努金的一个公式计算圆周率精确到了小数点后17位。
年,苏联裔美国数学家David和GregoryChudnovsky年,苏联裔美国数学家David和GregoryChudnovsky兄弟在同一个公式的基础上计算π到了位。
年,日本数学家金田康正年以后,日本数学家金田康正及其团队更在世界上遥遥领先,在3年把对π的计算提高到了1.24万亿位。
年1月,法国程序员FabriceBellard上面的纪录在年1月8日由法国一位程序员FabriceBellard打破。他改进了Chudnovsky兄弟的公式,用了天在一部台式计算机上成功地把π计算到2.7万亿位。
这个数字有多长呢?如果你平均用一秒钟来报出一个数字的话,那么需要8.5万年才能读完它的所有数字。
年8月,日本工程师近藤茂可是,这个世界纪录到8月份又被打破了,日本工程师近藤茂与美国西北大学计算机系的香港学生余智恒合作,把π值算到了5万亿位。
年9月,雅虎科技公司的研究员施子和谁知道,当欢呼声犹在耳际,9月17日英国BBC又作出了惊人的报道,说雅虎科技公司的研究员、原香港科技大学毕业生施子和采用“云计算”技术,利用0台计算机同时计算,历时23天,将π计算到小数点后2千万亿位,为8个月前法国人Bellard记录的近一千倍。
这可不是只增加了大约一千个数位,而是由一千个、每个都有2.7万亿位长的数字连接起来。施子和兴奋无比地向全世界宣布了他的计算结果,还说他发现了“π的小数点后第两千兆位是0!”
你能记住π小数点后多少位?你或许不以为然,说用计算机来计算π不足为奇。那么,用人脑进行计算和记忆就不容易了吧?如果我告诉你,有人能正确无误地记住π的数值从3.14开始一直到小数点后几万位数字,你会觉得匪夷所思吧?
其实,多少年来一直有凭人脑记忆背诵π数值的吉尼斯世界纪录,目前领先的是中国人吕超。5年11月20日,当时是西北农林科技大学研究生的吕超用了24小时零4分的时间,连续背诵出π值到小数点后位。
读到这里,你如果不是数学粉丝的话其实并不会特别激动:知道π≈3.14就已经足够了,谁去关心它长长尾巴上的无穷多位数字呢?
说来也是,造物主有这么多东西可以创造,为什么偏偏造出这个神奇的π来,让许许多多的数学家和粉丝们两千多年来呕心沥血地去追寻不休呢?
其实,造物主并不是一些人所想象得那么无聊。
无处不在的神奇数字你可能早已听说过,π与地球上的许多河流有关:河流弯曲河道的曲线长度与河道首尾直线距离之比通常都接近于3.14——河道越是蜿蜒曲折,这个近似值就越好——亚马逊河便是一个例子。
最令人惊叹的是年11月《科学》杂志上报道的,德国格丁根大学马克·普朗克动力学与自组织科学研究所和伯恩斯坦计算神经科学研究中心的科学家MatthiasKaschube及其团队的一项研究成果。研究人员发现,相同哺乳类中的三种远亲动物婴猴、树鼩和蒙眼貂的大脑中,它们视觉皮层的螺旋结构平均分布密度都是一样的,而且都落在π值3.14的95%置信区间之中。
真的?这不会是巧合吧?虽然这个3.14不能与用计算机得到的两千万亿位数字相提并论,但对于理论生物学家来说,3.14已经是一个令他们难以置信的超级精确度了。
科学家们相信,今天的生物大脑都是经过漫长时间通过自组织演化过程而逐渐形成的,并且都具有某种最优的结构和功能。
如果是这样的话,那些哺乳类动物大脑视觉皮层中基本螺旋结构分布都不约而同地呈现出以3.14为平均密度之特征,是不是自然进化的最优结果呢?不会是造物主在创世开始时,不经意地在它们的大脑中写下了那个神奇的数字π吧?
计算圆周率的方法1--蒙特卡罗的方法利用蒙特卡罗分析法可用于估算圆周率,如图,在边长为2的正方形内作一个半径为1的圆,正方形的面积等于2×2=4,圆的面积等于π×1×1=π,由此可得出,正方形的面积与圆形的面积的比值为4:π圆和正方形的面积比是:现在让我们用电脑生成若干组均匀分布于0-2之间的随机数,作为某一点的坐标散布于正方形内,那么落在正方形内的点数N与落在圆形内的点数K的比值接近于正方形的面积与圆的面积的比值,即,N:K≈4:π,因此,π≈4K/N。(K是在圆内的,N是总的)
importrandomnum_all=0#随机点总计数器num_cir=0#随机点在圆内的计数器num_halt=00#每产生10,,个随机点后,计算并打印一次目前的结果print("将进行无限计算,请用Ctrl_C或其他方式强制退出!!!")input("按回车(Enter)键开始...")print("开始计算...,退出请用Ctrl_C或其他强制退出方式...")print("\n实验次数计算结果")while1:foriinrange(num_halt):x=random.random()#获得随机点的横坐标y=random.random()#获得随机点的纵坐标ifx*x+y*y1:#随机点(x,y)在圆内num_cir=num_cir+1#圆内计数器+1num_all=num_all+1#总计数器+1pi=4*num_cir/num_allprint(num_all,"",pi)割圆迭代法:也很直观易懂,效率还不错
现在我们用刘徽和祖冲之的割圆术试试。
割之弥细,所失弥少。割之又割,以至于不可割,则与圆周合体而无所失矣。
与阿基米德相似,刘徽也是从正六边形开始计算的。不同的是,刘徽以面积来计算,他通过分割圆为边形,计算出圆周率在3.与3.之间,取其近似值/50。
原理是这样的:设想一个圆,半径r=1,内接一个正n边形,边长为a,那么当这个多边形的边数n越大,它的周长就越接近圆的周长。所以我们就可以用多边形的周长代替圆的周长并应用圆的周长公式得到:
公式圆的内接正n边形边长a可以迭代计算:
公式我们从正六边形开始,它的边长a=r=1,然后计算正12边形、正24边形、正48边形...逐渐逼近圆。
#因为计算机精度原因,64位机算到边形就无法继续提高计算结果的精度了importmathn=6a=1print("%-15s%-20s"%("内接正n边形","π计算结果"))print("%-20d%-20.12f"%(n,n*a/2))foriinrange():n=2*na=math.sqrt(2-2*math.sqrt(1-(a/2)**2))print("%-20d%-20.12f"%(n,n*a/2))
思考:为什么后面的值是0?????
3、梅钦级数法:不直观但也易懂,效率超高大Boss梅钦(JohnMachin)用他的神奇公式亲手把π算到了小数点后位,今天,我们借助Python编程,可以远远超过这个精度。
梅钦公式:
公式数学上可以进行级数展开,我们表示为:
公式为了能做到高精度快速计算,我们把所有的级数都变成整数运算,因此,如果我们希望计算到π的小数点后面n位,就在上述公式两边乘以10的n次方,并全部运行整除运算(运算符号是“//”)。最后我们得到的一个π乘以10^n所形成的一个巨大的整数来表示计算结果(如果需要,可以通过字符变换把小数点加回去,这里就略过了)。
基于这样的思路,我们的代码是:
n=int(input("请输入想要计算到小数点后的位数:"))#输入字符转换为整数t=n+10#多计算10位,防止尾数取舍的影响b=10**t#为算到小数点后t位,两边乘以10^tx1=b*4//5#取整求含4/5的首项x2=b//-#取整求含1/的首项s=x1+x2#求第一大项n*=2#设置下面循环的终点,即共计算n项foriinrange(3,n,2):#循环初值=3,末值n,步长=2x1//=-25#取整求每个含1/5的项及符号x2//=-#取整求每个含1/的项及符号x=(x1+x2)//i#求两项之和,除以对应因子,取整s+=x#求总和pai=s*4#求出πpai//=10**10#舍掉后十位print(pai)#输出圆周率π的值,不带小数点
请运行,然后,请你大胆输入00,就是说要精确到00位!
激动人心的时刻到了,不出意外的话,几秒钟就出结果,一万位的π出炉了!
python对于科学计算有着天然的优势这得益于Python对数学计算的支持,还有很多数学计算的公式可以直接在python的数学库中找到,并直接使用。
在π的计算中,整数的处理方式,它能处理的整数大小不取决于寄存器大小(例如64位机=8B),而是取决于可用内存的大小(例如8GB,当然系统可能不会给用这么多,但就算给你8MB就非常厉害了),所以能计算的整数是非常非常大的。
如果你愿意等,也可以试试5万位、10万位、20万位,时间会长一些,但现在的家用电脑一般也能算得出来!
若你想要尝试万位,就不敢保证了,请做好死机的准备。
上课地点:橡树湾小区或老师上门授课。
欢迎扫码添加老师
本文编辑:佚名
转载请注明出地址 http://www.jiubiyinga.com/xwgj/10721.html