1.PI的求法的数学依据
如图,可以看见在边长为1的正方形里面,有一个1/4圆,我们随机在正方形中取点,点在圆内的概率和点在正方形内的概率之比正好为两者的面积之比.这样就有在圆内的点的数目比所有点的数目值应该为0.25*π*1/1=0.25π.只要我们随机取点的数目足够多,根据上述关系求得的π的精确率就越高.我们最终可以得到π=4*在圆内的点的数目/所有点的数目,据此,可以写出如下程序:
from numpy.random import rand def sample(n): return (rand(n)**2+rand(n)**2<=1).sum() n=1000000 pi=4*sample(n)*1.0/n print pi
输出:3.140556(此值可能会变化)
根据上述程序,可以将求π的程序改写成并行版本:
from ipyparallel import * rc=Client() dview=rc[:] with dview.sync_imports(): from numpy.random import rand def sample(n): return (rand(n)**2+rand(n)**2<=1).sum() n=1000000 list=[n]*len(dview) #list 由 len(dview)个n构成,正好每一个engine一个 pi=4*sum(dview.map_sync(sample,list))*1.0/(n*len(dview)) print pi
输出:3.141763(每次输出都不一样)