zoukankan      html  css  js  c++  java
  • ipyparallel 中的 pi的求法

    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(每次输出都不一样)

  • 相关阅读:
    P2802 【回家】
    P1706 【全排列问题】
    P1936 【水晶灯火灵】
    P1319 【压缩技术】
    P2670 【扫雷游戏】
    P1097 【统计数字】
    P1820 【寻找AP数】
    P1020 【导弹拦截】
    链表反转
    队列:队列在有限线程池中的应用
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5101419.html
Copyright © 2011-2022 走看看