今天脑壳抽筋,想估计圆周率和自然对数底数的值

就跟标题里面一样,今天脑壳抽筋,想估算一下圆周率的值

刚刚上完体育课,脑壳一抽,想着怎么编圆周率的程序(_)
结果今天还真的给我弄出来了哈哈
首先是两种方法:
1.蒙特卡洛方法:源于摩洛哥著名赌城蒙特卡洛。有一天押轮盘(不知道那是个啥子的可以看看周润发发哥的《赌神》,这个我强势安利嗷)连中了22个黑(是不是22个?哎呀我也忘了,反正就二十几个黑)然后这个事情把蒙特卡洛带火了嘛。之后,《概率论与数理统计》里面充斥着蒙特卡洛的金钱气息()
基本原理就是用离散的点的个数模拟连续的概率分布。通过大量的测试,以频率估计概率,从而估计正确结果。当然,我们做的毕竟是有限次实验,估计值绝对有偏差。但是……额……其实也还好(尬笑)
少说废话,直接上代码吧(这里我用的python):

>>> ##利用蒙特卡洛方法估计圆周率的值
>>> import random
>>> import math
>>> def montekarlo():
 pailist=[]
 for i in range(10):
  count=0
  for j in range(10000):
   x=random.random()   ##投掷一个点,计算它的坐标
   y=random.random()
   if x*x+y*y<=1:      ##利用距离公式
    count+=1           ##这里我们计算的是Π/4,注意!
  pailist.append(4*count/10000)
  print(4*count/10000)
 sum=0.0000
 for pais in pailist:
  sum+=pais
 print('平均结果:%.4f'%(sum/10))

运行了几遍,我就只放一次运行的结果吧

>>> montekarlo()
3.1336
3.13
3.1352
3.1576
3.1416
3.138
3.1416
3.128
3.148
3.1572
平均结果:3.1411

2.割圆术
这个是中国人发明的方法。原理就是找圆内的正方形,不断扩大边数。当边数到一定程度,多边形的边长就可以近似为圆周长了。
接着,咱们就是要想想怎么化简周长?我们知道,一个等腰三角形,底的对角为x时,知道腰长为R,底长就是2Rsin(x/2)。对n边形,x=2pai/n。那么,周长就是n2Rsin(pai/n)

##割圆术
def cut():
 thelta=1.57/math.pow(2,14)   ##这里我先入为主,先给出了Π/2的估计值1.57不知合不合适
 pai=math.pow(2,15)*math.sin(thelta)
 print(pai)

结果:

>>> cut()
3.1399999951945086

接着我又估计了一下e的值,用泰勒公式。(详见高等数学)

def power_2(i):##算阶乘
 p=1
 for u in range(1,i):
  p*=u
 return p*i
 def taylor_e_2():##算泰勒公式
 e=1.0000
 for i in range(1,100):
  quarter=1/power_2(i)
  e+=quarter
 print(e)
>>taylor_e_2()
2.7182818284590455

这里也给出了求圆周率的第三种方法,就是级数展开。或者,咱们也可以看看什么函数的定积分值是圆周率。可惜,鄙人数学辣鸡,如果哪位大神会的话可以评论区留个思路哈哈
最后再吹一波我关山口男子职业技术学院,妹子超多,欢迎报名(滑稽)

你可能感兴趣的:(程序设计)