优质教育程序员代码改变世界

二项分布近似模拟实验

2016-12-02  本文已影响142人  zoyanhui

二项分布

模拟实验

import random
import matplotlib.pyplot as plt

LMBDA = 1

def binomial(n, p):
    sumOb = 0
    for i in range(n):
        pp = random.uniform(0,1)
        sumOb += (1 if pp < p else 0)
    return int(float(sumOb) / n * 100000)

# np固定(n->无穷大,p->正无穷小),二项分布趋近于泊松分布,模拟实验
def experimentPoison(times):
    ob = []
    for i in range(times):
        n = random.randint(80000, 100000)
        p = float(LMBDA) / n
        ob.append(binomial(n, p))
    return ob

# p固定,n->无穷大,二项分布趋近于正态分布,模拟实验
def experimentNorm(times):
    ob = []
    p = 0.3
    for i in range(times):
        n = random.randint(80000, 100000)
        tmp = binomial(n, p)
        ob.append(tmp)
    return ob
# 正态模拟画图
obNorms = experimentNorm(10000)
plt.hist(obNorms, 50)
plt.show()

output_2_0.png
# 泊松模拟画图
obsPoison = experimentPoison(10000)
plt.hist(obsPoison, 50)
plt.show()
output_3_0.png
上一篇下一篇

猜你喜欢

热点阅读