使用计算机计算圆周率有很多方法,可以利用很多逼近公式。本文使用简单的采样办法,可以方便的估算出圆周率的值。
回想一下,圆的面积计算公式是:
![][1]
[1]: http://latex.codecogs.com/png.latex?s_y=\pi*r^2
正方形的面积计算公式:
![][2]
[2]: http://latex.codecogs.com/png.latex?s_z=d^2
如图所示的是一个单位圆,以及它的外接圆,这个外接圆的边分别于坐标轴垂直。
由于是单位圆,r = 1, d = 2r = 2,那么:
![][3]
[3]: http://latex.codecogs.com/png.latex?s_y/s_z=(\pir^2)/(4r^2)=(\pi/4)
设想一下,如果我们在x,y轴上随机取[-1,1]内的点,那么有一部分落在圆内,一部分落在圆外(但仍在正方形内部)。那么当随机取得点足够多的时候,落在圆内的点(point_i)与总体采样点(point_w)的比例就是上述公式中的面积比了
![][4]
[4]: http://latex.codecogs.com/png.latex?point_i/point_w=s_y/s_z=(\pi/4)
![][5]
[5]: http://latex.codecogs.com/png.latex?\pi=4*(point_i/point_w)
代码整体如下:
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 13 22:09:24 2016
@author: Administrator
"""
import random as rd
import math
sample_count = 10000000 #采样次数
inner = 0 # 落在圆内的点
i = 0 # while 计数器
while i < sample_count:
x_i = rd.uniform(-1,1)
y_i = rd.uniform(-1,1)
if (math.pow(x_i,2) + math.pow(y_i,2)) < 1 :
inner = inner + 1
i = i + 1
pi = 4*(inner * 1.0)/(sample_count)
print pi