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() 。
两种方式都是对的,关键是看,传过来的参数是λ,还是指数分布的期望。再有一点就是随机数问题,这个一般系统提供的是一个伪随机,而且默认参数与系统时钟有关。
代码贴在下面,做点贡献吧,此代码是按照严格的数学关系产生的,在最后附上一个别人写的程序,指出其问题所在。
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() 。
两种方式都是对的,关键是看,传过来的参数是λ,还是指数分布的期望。再有一点就是随机数问题,这个一般系统提供的是一个伪随机,而且默认参数与系统时钟有关。
相关文章推荐
- C#产生正态分布、泊松分布、指数分布、负指数分布随机数(原创)
- 产生按指数分布的随机数----摘自csdn
- Java按照指数分布实现随机数
- 数字信号产生之指数分布的随机数
- 【转载】任意分布的随机数产生
- 任意分布的随机数的产生方法—VC程序实现方法
- C# 产生不重复的随机数
- C#产生随机数的类
- c# Random快速连续产生相同随机数的解决方案
- 产生特定分布的随机数(一):均匀分布和高斯分布
- c# 蒙特卡罗算法程序----对数正态分布的随机数的产生
- 使用C语言产生正太分布的随机数之问答篇
- c#.net利用RNGCryptoServiceProvider产生任意范围(int32)强随机数的办法
- C# 不重复随机数的产生问题
- C#产生不重复的随机数
- unity3d c# 产生真正的随机数
- 数字信号产生之二项分布的随机数
- 使用VS2005 C#编写随机数Random算法的代码(适用于连续产生随机数,重置后不适用)
- C# 产生随机数( DateTime.Now.Ticks)
- C#产生不重复的随机数并生成随机文件名