zoukankan      html  css  js  c++  java
  • 大约值的计算

             最近遇到非常多用概率论求π值得问题,在此写文总结一下下。

             方法一:

    (2014年深度学习算法研发project师笔试题)此方法是百度的多次面试加笔试题。看往年笔试题遇到。题目例如以下:

    在平面上有一组间距为d的平行线,将一根长度为l(l<a)的针随意掷在这个平面上,求此针与平行线中随意一根相交的概率,用高等数学(微积分、概率的方法)求解,基于布丰投针的结论,任选一种编程语言(C/C++, matlab, python,java),写出模拟投针实验(程序中同意把一个理想的Pi作为常量使用),求解圆周率。(15分)

    事实上这是非常有名的普丰投针问题,用以计算圆周率π。

    以下我们用数学分析的方法来证明上述实验求π的可行性:

    证明:设A=‘针与某平行线相交’,针落在平面上的情况不外乎图中的几种。设x为针的中点到近期的一条平行线的距离。α为针与平行线的夹角。则

    0<=x<=d/2,0<=α<=π/2,不等式确定了平面上的一个区域S。

    A发生等价于x≤lsina/2 ,不等式确定了S的子域A,

    所以p(A)=s(A)/s(S)这里用到了积分。直接传手写图了。由于数学类的公式真心不怎么会敲。



    方法二:

    用了非常朴素的数学思想:一个正方形的内切圆,用随机数生成大于零小于1的点,落在圆内的概率是圆面积与正方形面积的比(近似)p=π/4,因为当计算次数越大,实验概率越接近理论概率,计算出的π结果值越精确。p =[ π(a/2)*(a/2)] / (a*a)  得p(近似)=π/4.

                                                                   

    代码:

    public static double compute(int n) 
    { 
    int k=0; for(int i=0; i<=n; i++) 
    { 
    double x = Math.random(); 
    double y = Math.random(); 
    if((x*x + y*y)<=1) 
    } 
    return 4*k/(double)n; 
    } 

    方法三:(摘自论坛http://www.newsmth.net/nForum/#!article/IQDoor/75341)

    利用随机整数互素的概率来得到π的近似值.详细步骤例如以下.
    取一大整数N,在1到N之间随机地取一对整数a,b,找到它们的最大公约数(a,b),做n次这种实验,记录(a,b)=1的情况次数m,计算出p=m/n的值.

    在Knuth的TAOCP书上有证明,我这里简述例如以下吧。 

    设两个数u,v互质的概率为p,则gcd(u,v)=d当且仅当d|u,d|v,gcd(u/d,v/d)=1。所以任

    两个数最大公约数为d的概率为p/d/d,即p/(d^2) 

    在正整数集合上有p+p/4+p/9+……p/(n^2)+……=1,easy求得p=6/(π*π)。



    參考文献:http://wenku.baidu.com/link?url=xO4CtaDw99ZtksN6sy2BUIghP-Y6y9t-T0tnXNzKooqCd3Uc6JmrKC_Bm8dgV5G9KEp8c4CeeyLYGY60ud3RtOeIISCHfRVoEAVvJQWrgJ_

           








  • 相关阅读:
    前端开发 vue,angular,react框架对比1
    前端开发 Angular
    前端开发 Vue Vue.js和Node.js的关系
    net技术
    net技术方案
    软件工程项目费用计算
    前端开发 Vue -4promise解读2
    前端开发 Vue -4promise解读1
    mybatis与hibernate区别
    struts2和springmvc的区别
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4556488.html
Copyright © 2011-2022 走看看