_3_ python应用示例1:计算圆周率

使用计算机计算圆周率有很多方法,可以利用很多逼近公式。本文使用简单的采样办法,可以方便的估算出圆周率的值。

回想一下,圆的面积计算公式是:

![][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

_3_ python应用示例1:计算圆周率_第1张图片
单位圆及其外接正方形

如图所示的是一个单位圆,以及它的外接圆,这个外接圆的边分别于坐标轴垂直。
由于是单位圆,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)的比例就是上述公式中的面积比了

_3_ python应用示例1:计算圆周率_第2张图片
采样点示例

![][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

你可能感兴趣的:(_3_ python应用示例1:计算圆周率)