WEB开发网
开发学院软件开发VC 任意分布的随机数的产生方法—VC程序实现方法 阅读

任意分布的随机数的产生方法—VC程序实现方法

 2007-03-15 21:55:46 来源:WEB开发网   
核心提示: 基于以上思想,我们可以用程序实现在一定范围内服从正态分布的随机数,任意分布的随机数的产生方法—VC程序实现方法(4),程序如下:double Normal(double x,double miu,double sigma) //概率密度函数{return 1.0/sqrt(2*PI*si

基于以上思想,我们可以用程序实现在一定范围内服从正态分布的随机数。程序如下:

double Normal(double x,double miu,double sigma) //概率密度函数
    {
    return 1.0/sqrt(2*PI*sigma) * exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));
    }
    double NormalRandom(double miu,
         double sigma,double min,double max)//产生正态分布随机数
    {
    double x;
    double dScope;
    double y;
    do
    {
    x = AverageRandom(min,max);
    y = Normal(dResult, miu, sigma);
    dScope = AverageRandom(0, Normal(miu,miu,sigma));
    }while( dScope > y);
    return x;
    }

参数说明:double miu:μ,正态函数的数学期望

   double sigma:σ,正态函数的均方差

   double min,double max,表明产生的随机数的范围

用如上方法,取 μ=0,σ=0.2,范围是-1~1产生400个正态随机数如图3所示:

   图3 μ=0, σ=0.2,范围在-1~1时的400个正态分布的随机数分布图

取 μ=0, σ=0.05,范围是-1~1产生400个正态随机数如图4所示:

   图4 μ=0,σ=0.05,范围在-1~1时的400个正态分布的随机数分布图

从图3和图4的比较可以看出, 越小,产生的随机数靠近 的数量越多,也说明了产生的随机数靠近 的概率越大。

我们,先产生4000个在0到4之间的正态分布的随机数,取μ=0,σ=0.2,再把产生的数据的数量做个统计,画成曲线,如下图5所示:

   图5 μ=0, σ=0.2,范围在0~4时的4000个正态分布的随机数统计图

从图5中也可以看出,在靠近 处的产生的个数多,远离 处的产生的数量少,该图的轮廓线和概率密度曲线的形状刚好吻合。也就验证了该方法的正确性。

有了以上基础,也就用同样的方法,只要知道概率密度函数,也就不难产生任意分布的随机数,方法都是先产生一个点,然后进行取舍,落在概率密度曲线下方的点就满足要求,取其横坐标就是所要获取的随机数。

上一页  1 2 3 4 

Tags:任意 分布 随机数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接