指数分布与泊松分布的随机值的产生程序原理解析

 

最近做毕业设计要涉及到排队问题的仿真。而根据排队论,指数分布的随机值是表示两个排队者进入队列的时间间隔;而泊松分布的随机值表示的是单位时间内进入排队者的数量。

1 先来复习一下公式吧~

1.1 指数分布:

1.1.1 概率密度函数:

clip_image002[1] (1)

1.1.2 概率分布函数:

clip_image002[3] (2)

1.2 泊松分布

1.2.1 概率密度函数:

clip_image002[5] ,k=0,1,2,3……. (3)

1.2.2 概率分布律:

clip_image008 (4)

1.3 伽马分布

1.3.1 概率密度函数:

clip_image010 (5)

1.3.2 概率分布律:

clip_image012 (6)

1.3.3 伽马函数:

clip_image014 (7)

clip_image016 (8)

clip_image018 (9)

伽马函数的特性:clip_image020

2 生成连续分布随机变量的一般方法

根据分布函数的性质,F(x)单调上升,clip_image022,在clip_image024,所以F(X)可逆。

设y=F(x),则

clip_image026

我们可以用U(U是服从[0,1)均匀分布的随机变量)代替式子中的y,我们需要的目标随机变量X替换x,得:

clip_image028 (10)

3 生成指数分布随机变量的方法

clip_image030,通过逆变换得:

clip_image032

因为1-U(U是服从[0,1)均匀分布的随机变量)也服从均匀分布,所以

clip_image034

这时的U必须不等于0。

4 生成泊松分布随机变量的方法

这里我是通过服从指数分布的随机变量来生成泊松分布的随机变量。因为指数分布实际上是伽马分布的一种特殊情况。

大家看下面这个伽马分布的密度函数:

clip_image036

我们令clip_image038,clip_image040这个式子就化成了下面这个指数分布的密度函数

clip_image002[1]

而伽马分布还具有的一个性质是加成性

如果随机变量clip_image042相互独立,则存在服从伽马分布的clip_image044符合一下规则

clip_image046

因为指数分布是伽马分布的特例,所以也有如上性质。

然后,我们知道指数分布的随机变量是表示两个排队者的时间间隔,我们一直产生期望为clip_image048的指数分布的随机变量clip_image042[1]直到,clip_image050然后停止,这时m-1就是我们要的泊松分布在clip_image0521时间内的随机变量,根据伽马分布的可加性,clip_image050[1]的概率就是服从:

clip_image002

clip_image004

clip_image006

因此,令n=m-1这个伽马分布的随机变量=μ的概率,就是:

clip_image002[6]

clip_image004[5]

有上式结果可知,确实服从泊松分布。

接下来就是将产生的服从指数分布的clip_image042[2]替换为clip_image066得:

clip_image068

clip_image070

clip_image072

这个算法平均产生一次的泊松分布需要产生clip_image074次的均匀分布的随机变量U,所以在clip_image076不是很大时,是个不错的算法。

DELPHI指数分与泊松分布:

 

 

{*------------------------------------------------------------------------------
  仿真模块
  @Author    DJ尐舞
  @Version   2009.02.07   DJ尐舞    Initial revision                                       
-------------------------------------------------------------------------------
}

unit EmulateUnit;

interface

type
  TEmulate
=class
 
private

 
public
   
class function ExponentialRandom(miu:Integer):double;
   
class function PoissonRandom(lamda:integer):integer;
 
end;

implementation
{*------------------------------------------------------------------------------
  生成指数分布的随机数
  @param miu   指数分布的期望
  @return double   服从指数分布的随机值
------------------------------------------------------------------------------*
}
 
class function TEmulate.ExponentialRandom(miu:Integer):double;
 
begin
    randomize;
    result:
=-miu*ln(1-random);
 
end;
{*------------------------------------------------------------------------------
  生成服从泊松分布的随机书
  @param lamda   泊松分布的期望
  @return integer   服从泊松分布的随机值
------------------------------------------------------------------------------*
}
 
class function TEmulate.PoissonRandom(lamda:integer):integer;
 
var b,c,r:real;x:integer;
 
begin
    x:
=0;b:=1;c:=exp(-lamda);
   
repeat
   
begin
     r:
=random;
     b:
=b*r;
     x:
=x+1;
   
end
   
until b<c; // 泊松分布需要产生次的均匀分布的随机变量U ,x则是车辆数
    result:
=x-1;
 
end;
end.

 

有什么错误欢迎更正哦~

 

作者:DJ尐舞

欢迎转载,转载请注明出处 http://djbone.cnblogs.com

posted @ 2009-02-07 03:02  DJ尐舞  阅读(10319)  评论(10编辑  收藏  举报