泊松分布实现和基于指数分布实现的满足泊松分布的时间序列

目录

代码: 

满足泊松分布的离散变量,离散变量之间的时间间隔满足指数分布。

生成泊松分布的变量参考算法:

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版权协议,转载请附上原文出处链接和本声明。