求圆周率 | 蒙特卡洛 | 工程学方法 | 公式法

第一篇 工具集的源码,很简单,仅做个记录。

公式法求圆周率

import time
pi = 0
N = 100
t1=time.process_time()
for k in range(N):
    pi += 1/pow(16,k)*( \
              4/(8*k+1) - 2/(8*k+4) - \
              1/(8*k+5) - 1/(8*k+6) )
t2=time.process_time()
print("{:>10}".format(t2-t1))
print("圆周率值是: {}".format(pi))

工程学方法:蒙特卡洛

蒙特卡洛方法。

import time,random
ti1=time.process_time()
sum=0
N=1000*1000
for i in range(N):#循环一百万次
    x,y=random.random(),random.random()#0-1的随机小数组成的二维坐标
    end=(x**2+y**2)**0.5
    if end<=1:#随机点在圆内
        sum+=1
pi=(sum/N)*4
ti2=time.process_time()
print("圆周率是%.2f\n执行时间为%fs"%(pi,ti2-ti1))

采用撒点的方式。生成一百万个0-1之间的随机坐标,计算坐标到原点的距离,如果距离小于给定半径,那么点在圆内,然后计数。
理论上讲,只要撒点数量足够,那么点撒在圆内的概率即是1/4圆的面积比上小正方形上。

算法给定半径为1,sum/N即为圆面积,pi=S/r**2,得到pi=(sum/N)*4
——————

发布了70 篇原创文章 · 获赞 15 · 访问量 4308

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/103449077