zoukankan      html  css  js  c++  java
  • 平均要取多少个(0,1)中的随机数才能让和超过1

    先用程序估算一下

    from __future__ import division
    import random
    N = 1000000
    sums = 0
    for i in range(N):
        count = 0
        s = 0
        while 1:
            s += random.random()
            count += 1
            if s > 1:
                sums += count 
                break
    print sums / N

    三次给出的结果分别是

    2.716957 2.718334  2.71885
    

    2.718不就是e的味道吗,下面证明一下

    先取两个特例

    特例1:x+y < 1——两个随机数之和小于1

    结果是紫色部分,为1/2

    特例2:x+y+z< 1——三个随机数之和小于1

    结果为深底下面的,占整个体积的1/6(锥体积:1/3*底面积*好=1/3 * 1/2 * 1 *1)

    这个 1/6 可以利用截面与底面的相似比关系,通过简单的积分求得:

       ∫(0..1) (x^2)*1/2 dx = 1/6

    推广:四个 0 到 1 之间的随机数之和小于 1 的概率就等于四维立方体一角的“体积”,它的“底面”是一个体积为 1/6 的三维体,在第四维上对其进行积分便可得到其“体积”

      ∫(0..1) (x^3)*1/6 dx = 1/24

    依此类推, n 个随机数之和不超过 1 的概率就是 1/n! ,反过来 n 个数之和大于 1 的概率就是 1 – 1/n! ,因此加到第 n 个数才刚好超过 1 的概率就是

     (1 – 1/n!) – (1 – 1/(n-1)!) = (n-1)/n!

    因此,要想让和超过 1 ,需要累加的期望次数为

           ∑(n=2..∞) n * (n-1)/n! = ∑(n=1..∞) n/n! = e

    转自:http://www.matrix67.com/blog/archives/3507

  • 相关阅读:
    Python之描述器
    Python魔术方法
    Python二分法查找
    Qt连接oracle
    oracle11g下载安装
    Qwidget,QMainWindow ,Qdialog
    动态库
    静态库
    Qt翻译文件
    Qt 日志界面类
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3946384.html
Copyright © 2011-2022 走看看