圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母π表示,在数学及物理学中普遍存在的数学常数,但它是一个无理数,即无限不循环小数。
下面介绍两种方法求π:
方法1,蒙特卡洛方法
随机产生n个点,计算它们与中心点的距离是否大于圆的半径,以此判断是否落在圆的内部,根据落在正方形和圆内的点数的比值进行计算。

# -*- coding: utf-8 -*-
import random
from random import random,seed
from math import sqrt
from time import clock #计算程序运行时间
def PI_0():
hists=0 #抛洒点在1/4(半径为1)圆内点的个数
clock()
seed(666)
for darts in range(1, int(1e5)):
x,y=random(),random()
dict=sqrt(x**2+y**2)
if dict<=1.0:
hists=hists+1 #随机设点,若抛洒点在1/4圆内,则dice+1
pi=4*(hists/darts)
print("********抛洒点的个数 %s" % darts,"********")
print("PI的值是 %s" %pi)
print("程序运行的时间是 %-5.5ss" %clock())
PI_0()
方法2,公式法
格雷戈里和莱布尼茨发现PI = 4*(1-1/3+1/5-1/7 ....)
推导方法如下,(来自网络)

# -*- coding: utf-8 -*-
"""
@author: 风
@file: py_03.py
@time: 2018/10/25 23:58
@contact: 254305068@qq.com
"""
# PI = 4*(1-1/3+1/5-1/7 ....)
def PI_1():
flag = 1 # 奇数项位正,偶数项为负
temp = 1
sum = 0
i = 1
while i < 1e6:
temp = 1.0 / (2 * i - 1) * (flag)
i = i + 1
sum = sum + temp
flag = -flag
return 4*sum
print(PI_1())
import math
print(math.pi)
网友评论