用户登录
用户注册

分享至

模拟泊松的r软件 c程序中模拟泊松过程是什么原理

  • 作者: 帐号已停机
  • 来源: 51数据库
  • 2020-04-19

呵呵,我在CSDN上找到了一些资料 下面是引用内容。

指数分布的概率密度函数:y=lamda*exp(-lamda*x), x>=0

由此可以计算概率分布函数:y=1-exp(-lamda*x), x>=0

y 是 X<x 的概率,其取值在区间(0,1)内

首先,把 y 当作是在(0,1)区间的均匀分布的随机变量。

然后,求 y=1-exp(-lamda*x) 的逆函数,x=-(1/lamda)*ln(1-y)

令 z=1-y,显然 z 也是(0,1)区间的均匀分布的随机变量,于是就有 x=-(1/lamda)*ln(z)。

z可以通过 (double)rand()/RAND_MAX 计算。原因是rand()是随机分布函数。

再根据随机论的一个基本原理(书上有的)——如果时间相继出现的时间具有独立相同的指数分布,均值为1/lamda,那么时间出现的次数服从泊松过程,且均值为lamda×t。

好了,那我想我的流量发生器应该这写:

1.设计一个计时器。

2.这个计时器的触发时间Interval有上面所述的方法生成(用户要给出均值mean——应该就是平均速率,不知道这个理解有没有错,还请指教)。

3.每次触发时用Socket发送一个数据包。

4.最终,所有这些发的数据包就应该符合泊松分布。

这样理解应该没错了吧,那位知道的还请指教。

另外,我又一个问题:现在的方式是时间间隔为随机值,发送个数为1个数据包泊松过程。那么,如果每次触发时发送的数据包个数也是个随机值,那么应该是什么过程(有没有比较好的名称)?要如何实现。

最终满足指数分布的变量x,就可以通过x=-(1/lamda)*ln(z)计算。

如何编程产生泊松分布随机数?

用分数乘积法吧,比较简单,直接说方法,原理我就不说了哈:

第一步:产生很多(0,1)上的均匀分布随机数(可以查表,不过一般的软件可以直接调)设为x1,x2,x3,x4,x5....

第二步:假设需要模拟的泊松分布参数为λ,计算出e^(-λ),

第三步:取满足x1* x2* ...* xk >= e^(-λ) > x1* x2* ...*x(k+1)

中的K为产生的第一个随机数,然后把上面用过的k+1个数去掉,又重复上面的步骤就可以了。

比如 x1*x2 >= e^(-λ),但是x1*x2*x3 < e^(-λ),那么产生的第一个随机数就为2, 然后又从x4乘起,重复上面的步骤,产生第二个随机数。

至于 “最好是可以控制在某个范围之内的”是什么意思呀,只要是泊松分布,它取任何正整数都是有概率的!

泊松过程模拟一千次需要多少随机数

poissrnd(lamda) 那就是你没有安装统计工具箱建议完整安装新版matlab

求助:关于泊松分布的蒙特卡罗模拟

题目描述不够准确。估计楼主是想得到一组随机数:(1)该数组长400;(2)服从Poisson分布;(3)均值为200。很简单:mu=200;%均值.nrow=400;%数组长度.ncol=1;%列向量.numwanted=poissrnd(mu,nrow,ncol)%numwanted=希望得到的数组.

怎样用matlab产生泊松分布随机数

random('Poisson',Lambda)

random('Poisson',Lambda,m,n)

泊松分布的参数为Lambda,如果只产生一个随机数就是第一句的样子

第二行的语句表示会产生m×n个随机数,且这些随机数组成了m行n列的矩阵

matlab的help中给出的例子:random('poisson',1:6,1,6)表示产生lambda分别为1,2,3.。。6的六个随机数组成1×6的矩阵

> random('poisson',4)

ans =

5

>> random('poisson',4,3,3)

ans =

3 7 3

3 5 2

7 5 5

>> random('poisson',4:0.2:5,1,6)

ans =

2 4 6 7 5 7

请问如何用matlab生成满足该lambda值的泊松过程的样本

1.基本原理

根据服务系统接受服务顾客数服从泊松分布这一模型可知,{X(n),t }是一个计数过程,{ Tn,n>1} 是对应的时间间隔序列,若 Tn(n)(n=1,2,...)是独立同分布的均值为1/lambda的指数分布,则{X(n),t }是具有参数为λ的泊松过程。

2.具休实现过程

思路:本实验从用MATLAB编程软件,从构造服从指数分布的时间间隔入手,计算每个事件的发生时刻 ,最后得到X(t),也就模拟了泊松过程。

实现步骤如下:

(1).由函数random(‘exponential’,lamda)构造服从指数分布的 序列。

(2).根据服务系统模型, Wn+1=Wn+Tn+1 。

(3).对任意t (Wn,Wn+1),X(t)=n,由此得到泊松过程的模拟。

******泊松过程的检验---可忽略

1.检验方法

Kolmogorov-Smirnov检验(柯尔莫哥洛夫-斯摩洛夫),亦称拟合优度检验法,用来检用来检验模拟所得的数据的分布是不是符合一个理论的已知分布。

检验步骤及过程:

(1)条件设定:

H1:实验产生模拟泊松分布数据的总体分布服从泊松分布。

H0:实验产生模拟泊松分布数据的总体分布不服从泊松分布。

(2)检验准备:

对于H1,已经假定所产生模拟泊松过程数据 服从泊松分布,而强度 未知,利用函数poissfit(x,alpha)估算出模拟泊松过程的强度 ,再利用函数poisscdf(x,lamda)得到泊松分布的累积分布函数 。

(3) Kolmogorov-Smirnov检验

直接调用Kolmogorov-Smirnov检验函数kstest(x,[x,p],alpha),其中,x为输入模拟泊松序列,P为累积分布函数,1- alpha为置信区间,当结果 时,则输入数据位泊松分布,否则,不是泊松分布。

!!!!程序代码

clear

lamda=2;Tmax=50;

delta_t=0.1;%时间精度

i=1;a=random('exponential',lamda);

T(1)=round(a*10)/10;

w(1)=T(1);%初始化

%%%%%%%%%%%%%%泊松过程模拟%%%%%%%%%%%%%%%

while(w(i)<Tmax)

T(i)=random('exponential',lamda);%构造服从指数分布的时间间隔序列Tn

T(i)=round(T(i)*10)/10;

w(i+1)=w(i)+T(i);%计算等待时间

i=i+1;

end

w=w';

x=zeros(w(1)/delta_t,1);

for k=1:size(w,1)-1

length=w(k+1)/delta_t-w(k)/delta_t;

x=[x;ones(length,1)*k];%得到泊松分布X(t)序列

end

%%%%%%%%%%%泊松过程检验%%%%%%%%%%%%%%%%%

alpha=0.05;

lamda1=poissfit(x,alpha);%用MLE算法计算出泊松分布的强度lamda,置信区间为1-lamda

p=poisscdf(x,lamda1);%计算累计分布

[H,s]=kstest(x,[x,p],alpha)%利用Kolmogorov-Smirnov检验,置信区间为1-lamda

if H==1;

disp('该数据源服从泊松分布。')

else

disp('该数据源不服从泊松分布。')

end

转载请注明出处51数据库 » 模拟泊松的r软件 c程序中模拟泊松过程是什么原理

软件
前端设计
程序设计
Java相关