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

  • 相关阅读:
    Chrome使用指南
    Vue2.x-踩坑记
    C# WinForm listView 多行删除 操作
    Winform中DataGridView多行删除
    20211026_阿里云服务器引流限制ssl的问题
    docker commit
    docker build
    docker build与docker commit
    阿里云Docker镜像仓库(Docker Registry)
    Docker Nginx安装(centos7)
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5101419.html
Copyright © 2011-2022 走看看