c语言怎么产生指数分布,指数分布与泊松分布的随机值的产生程序原理解析

这篇博客介绍了如何利用指数分布和泊松分布进行排队问题的仿真。通过复习指数分布和泊松分布的公式,讨论了如何从均匀分布生成指数分布和泊松分布的随机变量。博主提供了用Delphi实现的指数分布和泊松分布随机数生成算法,并指出该算法在分布参数不是很大时效率较高。
摘要由CSDN通过智能技术生成

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

1 先来复习一下公式吧~

1.1 指数分布:

1.1.1 概率密度函数:

blog_674b81a201011lpx.html (1)

1.1.2 概率分布函数:

blog_674b81a201011lpx.html (2)

1.2 泊松分布

1.2.1 概率密度函数:

blog_674b81a201011lpx.html ,k=0,1,2,3……. (3)

1.2.2 概率分布律:

a4c26d1e5885305701be709a3d33442f.png (4)

1.3 伽马分布

1.3.1 概率密度函数:

a4c26d1e5885305701be709a3d33442f.png (5)

1.3.2 概率分布律:

a4c26d1e5885305701be709a3d33442f.png (6)

1.3.3 伽马函数:

a4c26d1e5885305701be709a3d33442f.png (7)

a4c26d1e5885305701be709a3d33442f.png (8)

a4c26d1e5885305701be709a3d33442f.png (9)

伽马函数的特性:a4c26d1e5885305701be709a3d33442f.png

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

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

设y=F(x),则

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png (10)

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

a4c26d1e5885305701be709a3d33442f.png,通过逆变换得:

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

这时的U必须不等于0。

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

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

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

a4c26d1e5885305701be709a3d33442f.png

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

blog_674b81a201011lpx.html

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

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

a4c26d1e5885305701be709a3d33442f.png

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

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

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

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

blog_674b81a201011lpx.html

blog_674b81a201011lpx.html

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

接下来就是将产生的服从指数分布的blog_674b81a201011lpx.html替换为a4c26d1e5885305701be709a3d33442f.png得:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

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

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

泊松分布需要产生次的均匀分布的随机变量U ,x则是车辆数

result:=x-1; end; end.

有什么错误欢迎更正哦~

作者:DJ尐舞

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值