目录
满足泊松分布的离散变量,离散变量之间的时间间隔满足指数分布。
生成泊松分布的变量参考算法:
Poisson distribution - Wikipedia
algorithm poisson random number (Knuth):
init:
Let L ← e−λ, k ← 0 and p ← 1.
do:
k ← k + 1.
Generate uniform random number u in [0,1] and let p ← p × u.
while p > L.
return k − 1.生成指数分布序列的方法:
通过生成01均匀分布的序列,带入连续分布的反函数实现
代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
#满足泊松分布的变量
plt.subplot(1, 2, 1)
l = math.exp(-6)
result =matrix=[]
for i in range(10000):
k =0
p =1
u = np.random.random()
p = p*u
k= k+1
while p >l:
u = np.random.random()
p = p*u
k= k+1
result.append(k-1)
bins = np.arange(20)
print(bins)
plt.hist(result, bins=bins, align='left', rwidth=0.1,density=True,stacked=True) # 绘制直方图
#设置标题和坐标
plt.title('Poisson PMF (lambda=6)')
plt.xlabel('number of arrivals')
plt.ylabel('probability')
#通过指数分布实现泊松间隔的序列
plt.subplot(1, 2, 2)
test = []
caculate = []
for i in range(10000):
test.append(np.random.random())
time = [0]
for i in range(10000):
time.append((-1/6)*math.log(test[i])+time[i])
for i in range(int(time[9999])):
num = 0
for j in time:
if i < j and j<i+1:
num = num+1
caculate.append(num)
bins = np.arange(20)
plt.hist(caculate, bins=bins, align='left', rwidth=0.1,density=True,stacked=True) # 绘制直方图
#设置标题和坐标
plt.title('Poisson PMF (lambda=6)')
plt.xlabel('number of arrivals')
plt.ylabel('probability')
plt.show()

版权声明:本文为weixin_44358770原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。