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

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

 2007-03-15 21:55:46 来源:WEB开发网   
核心提示: 调用方法是srand(GetTickCount()),但是又不能在每次调用rand()的时候都用srand(GetTickCount())来初始化,因为现在计算机运行时间比较快,任意分布的随机数的产生方法—VC程序实现方法(3),当连续调用rand()时,系统的时间还没有更新,远离&mu

调用方法是srand(GetTickCount()),但是又不能在每次调用rand()的时候都用srand(GetTickCount())来初始化,因为现在计算机运行时间比较快,当连续调用rand()时,系统的时间还没有更新,所以得到的随机种子在一段时间内是完全相同的,因此一般只在进行一次大批随机数产生之前进行一次随机种子的初始化。下面的代码产生了400个在-1~1之间的平均分布的随机数。

double dValue[400];
    srand(GetTickCount());
    for(int i= 0;i < 400; i++)
    {
    double dValue[i] = AverageRandom(-1,1);
    }

用该方法产生的随机数运行结果如图1所示:

   图1 400个-1~1之间平均分布的随机数

二、任意分布随机数的产生

下面提出了一种已知概率密度函数的分布的随机数的产生方法,以典型的正态分布为例来说名任意分布的随机数的产生方法。

如果一个随机数序列服从一维正态分布,那么它有有如下的概率密度函数:

(1-1)

其中μ,σ( >0)为常数,它们分别为数学期望和均方差,如果读者对数学期望和均方差的概念还不大清楚,请查阅有关概率论的书。如果取μ =0,σ =0.2,则其曲线为

   图2 正态分布的概率密度函数曲线

从图中可以看出,在μ附近的概率密度大,远离μ的地方概率密度小,我们要产生的随机数要服从这种分布,就是要使产生的随机数在μ附近的概率要大,远离μ处小,怎样保证这一点呢,可以采用如下的方法:在图2的大矩形中随机产生点,这些点是平均分布的,如果产生的点落在概率密度曲线的下方,则认为产生的点是符合要求的,将它们保留,如果在概率密度曲线的上方,则认为这些点不合格,将它们去处。如果随机产生了一大批在整个矩形中均匀分布的点,那么被保留下来的点的横坐标就服从了正态分布。可以设想,由于在μ处的f(x)的值比较大,理所当然的在μ附近的点个数要多,远离μ处的少,这从面积上就可以看出来。我们要产生的随机数就是这里的横坐标。

上一页  1 2 3 4  下一页

Tags:任意 分布 随机数

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