产生随机混乱的混合物

时间:2015-02-27 17:56:21

标签: c

我将编辑此问题:我想完全按照第二张图片的方式到达,是否有人对如何生成均匀随机分布有任何想法或参考。 我试图使用这个随机生成A点和B点(NA = 514 NB = 513)作为C语言矩形点的混合

for(i=0;i <=par.Na-1;i++) { 
    do { 
        coo[i][0] = w * ran1_fast()  ; //ran1_fast a random number from 0 to 1
        coo[i][1] = Le * ran1_fast()  ;
    } while(mindist2(i) < sd2) ;

    //similarly for B
    for (j = par.Na+1; j <=(par.Nb+par.Na)-1; j++) { 
        do {
            coo[j][0] = w * ran1_fast() ;
            coo[j][2] = Le * ran1_fast()  ;
        } while(mindist2(j) < sd2);

有了上述内容,我得到的是下图。我怎么能编辑这个以便我有完全随机的点而不是在另一个上重叠(如混乱的混合) - 见第二个数字。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

两个步骤:

  • 均匀分配所有积分(在本例中为1027)
  • 随机选择513个并将它们分成一个类别,另一个放入另一个

作为额外的警示,自动快速&#39;随机数发生器往往不是很好。请注意数字食谱中的建议:

&#34;如果由于不良[随机数发生器]导致结果有疑问的所有科学论文都要从图书馆的书架上消失,那么每个书架上的间隙就会与你的拳头一样大。&#34;

以下是一些未经测试且无法保证正常工作的代码。

    int temp[2*par.Na-1][2];

    for(i=0;i <=2*par.Na-1;i++) { 
        do { 
            temp[i][0] = w * ran1_fast();
            temp[i][1] = Le * ran1_fast();
        } while(mindist2(i) < sd2)  // I left this, but it could be an (almost) endless loop.

   for (i=par.N1-1; i>=0; i--)
      {
         int npick;
         npick = ran1_fast() * i;  // Pick an element randomly. Can your random number generator return 1? Then fix this.
         coo[i][0] = temp[npick][0];
         coo[i][2] = temp[npick][1];
         temp[npick] = temp[i];    // Copy down the last element.  
      }

//复制的第二部分留给读者作为例外。