您的位置:首页 > 编程语言 > C#

C#写的按照指数分布产生的随机数

2009-05-28 22:23 274 查看
最近在写一个排队系统的仿真程序,中间因为系统的服务时间和到来时间都是按照指数分布产生的,所以就在网上找了一下,发现没有,也有可以参考的,可是从数学角度分析一下,发现都不是很清楚,哎,求人不如求己,还是自己动手写吧。

代码贴在下面,做点贡献吧,此代码是按照严格的数学关系产生的,在最后附上一个别人写的程序,指出其问题所在。

public static double RandExp(double const_a)//此处的const_a是指数分布的那个参数λ

{
Random rand = new Random(Guid.NewGuid().GetHashCode());
double p = rand.NextDouble();
double temp;
if (const_a != 0)
temp = 1 / const_a;
else
throw new System.InvalidOperationException("除数不能为零!不能产生参数为零的指数分布!");
double randres;
randres = -temp * Math.Log(temp * p*const_a, Math.E);
return randres;
}

此处是别人的写的java中代码,可惜从数学上看写的不是很清楚

public double exponential(Random rng, double mean)

{
return -mean*Math.log( rng.nextDouble() );
}

此代码也是对的,就是他把0~λ的随机数,进行了简化,本来取对数时的参数是(1/const_a)* p*const_a,化简以后就剩下一个p了,即rng.nextDouble() 。

两种方式都是对的,关键是看,传过来的参数是λ,还是指数分布的期望。再有一点就是随机数问题,这个一般系统提供的是一个伪随机,而且默认参数与系统时钟有关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: