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

1 先来复习一下公式吧~

1.1 指数分布:

1.1.1 概率密度函数:

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

1.1.2 概率分布函数:

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

1.2 泊松分布

1.2.1 概率密度函数:

指数分布与泊松分布的随机值的产生程序原理解析 ,k=0,1,2,3……. (3)

1.2.2 概率分布律:

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

1.3 伽马分布

1.3.1 概率密度函数:

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

1.3.2 概率分布律:

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

1.3.3 伽马函数:

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

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

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

伽马函数的特性:指数分布与泊松分布的随机值的产生程序原理解析

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

根据分布函数的性质,F(x)单调上升,指数分布与泊松分布的随机值的产生程序原理解析,在指数分布与泊松分布的随机值的产生程序原理解析,所以F(X)可逆。

设y=F(x),则

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

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

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

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

指数分布与泊松分布的随机值的产生程序原理解析,通过逆变换得:

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

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

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

这时的U必须不等于0。

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

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

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

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

我们令指数分布与泊松分布的随机值的产生程序原理解析,指数分布与泊松分布的随机值的产生程序原理解析这个式子就化成了下面这个指数分布的密度函数

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

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

如果随机变量指数分布与泊松分布的随机值的产生程序原理解析相互独立,则存在服从伽马分布的指数分布与泊松分布的随机值的产生程序原理解析符合一下规则

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

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

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

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

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

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

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

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

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

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

接下来就是将产生的服从指数分布的指数分布与泊松分布的随机值的产生程序原理解析替换为指数分布与泊松分布的随机值的产生程序原理解析得:

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

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

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

这个算法平均产生一次的泊松分布需要产生指数分布与泊松分布的随机值的产生程序原理解析次的均匀分布的随机变量U,所以在指数分布与泊松分布的随机值的产生程序原理解析不是很大时,是个不错的算法。

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

相关文章:

  • 2022-01-05
  • 2021-05-24
  • 2022-02-06
  • 2022-12-23
  • 2021-10-22
  • 2021-04-14
猜你喜欢
  • 2022-01-09
  • 2022-12-23
  • 2021-08-15
  • 2021-07-16
相关资源
相似解决方案