求π的两种方法

2018-11-24  本文已影响17人  bad_boy

圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母π表示,在数学及物理学中普遍存在的数学常数,但它是一个无理数,即无限不循环小数。
下面介绍两种方法求π:

方法1,蒙特卡洛方法

随机产生n个点,计算它们与中心点的距离是否大于圆的半径,以此判断是否落在圆的内部,根据落在正方形和圆内的点数的比值进行计算。


蒙特卡洛方法中,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)
上一篇 下一篇

猜你喜欢

热点阅读