青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

[轉載]隨機數產生原理及應用

原創作者:EmilMatthew

摘要 : 
本文簡述了隨機數的產生原理,并用 C 語言實現了迭代取中法,乘同余法等隨機數產生方法,同時,還給出了在符合某種概率分布的隨機變量的產生方法。

關鍵詞 : 偽隨機數產生,概率分布 , 正態隨機數 , 泊松隨機數 , 高斯隨機數

1 前言 :
在用計算機編制程序時,經常需要用到隨機數,尤其在仿真等領域,更對隨機數的產生提出了較高的要求,僅僅使用 C 語言類庫中的隨機函數已難以勝任相應的工作。
用投色子計數的方法產生真正的隨機數 , 但電腦若也這樣做 , 將會占用大量內存 ; 用噪聲發生器或放射性物質也可產生真正的隨機數 , 但不可重復 .
而用數學方法產生最適合計算機 , 這就是周期有限 , 易重復的 ” 偽隨機數 ”
注 : 這里生成的隨機數所處的分布為 0-1 區間上的均勻分布。不是 0-1 區間怎么辦 ? 除以 (high-low), 再加上 low 不就行了 . 我們需要的隨機數序列應具有非退化性,周期長,相關系數小等優點。

2.1 迭代取中法:     ( 鄙視它 )
這里在迭代取中法中介紹平方取中法 , 其迭代式如下 : 
                  Xn+1=(Xn^2/10^s)(mod 10^2s) 
                  
 Rn+1=Xn+1/10^2s
其中, Xn+1 是迭代算子,而 Rn+1 則是每次需要產生的隨機數   。
第一個式子表示的是將 Xn 平方后右移 s 位,并截右端的 2s 位。
而第二個式子則是將截尾后的數字再壓縮 2s 倍,顯然 :0=<Rn+1<=1.
迭代取中法有一個不良的性就是它比較容易退化成 0.
實現 : 網上一大把 , 略 . 

 2.2 乘同余法: 
乘同余法的迭代式如下 : 

  Xn+1=Lamda*Xn(mod M)  (Lamda 即參數λ ) 
   
Rn+1=Xn/M

各參數意義及各步的作用可參 2.1 
當然,這里的參數的選取至關重要 .
經過前人檢驗的兩組性能較好的素數取模乘同余法迭代式的系數為 :
1 )   lamda=5^5,M=2^35-31
2 )   lamda=7^5,M=2^31-1
實現 : 請注意,這里一定要用到 double long, 否則計算 2^32 會溢出

2.3 混合同余法C++ 中的 rand() 就是這么實現的 , 偽隨機 , 故使用前一定要加 srand() 來隨機取種 , 這樣每次實驗結果才不會相同 .

混合同余法是加同余法和乘同余法的混合形式 , 其迭代式如下 :

Xn+1=( Lamda*Xn+C )%M
Rn+1=Xn/M 

 經前人研究表明,在 M=2^q 的條件下,參數 lamda,miu,X0 按如下選取,周期較大,概率統計特性好 :
Lamda=2^b+1,b 取 q/2 附近的數 
 C=(1/2+sqrt(3))/M
X0 為任意非負整數

它的一個致命的弱點,那就是隨機數的生成在某一周期內成線性增長的趨勢,顯然,在大多數場合,這種極富“規律”型的隨機數是不應當使用的。
 
實現 :
1 double  _random( void ) 
 2
 3 int  a; 
 4 double  r; 
 5
 6 a = rand() % 32767 ; 
 7 r = (a + 0.00 ) / 32767.00 ; 
 8
 9 return  r; 
10
11 }

3連續型隨機變量的生成:


       3.1 反函數法 : 又叫反變換法 , 記住 , 它首先需要使用均勻分布獲得一個 (0,1) 間隨機數 , 這個隨機數相當于原概率分布的 Y 值 , 因為我們現在是反過來求 X. 哎 , 聽糊涂了也沒關系 , 只要知道算法怎么執行的就行 .

    采用概率積分變換原理 , 對于隨機變量 X 的分布函數 F(X) 可以求其反函數,得 : 原來我們一般面對的是概率公式 Y=f(X). 現在反過來 , 由已知的概率分布或通過其參數信息來反求 X.

Xi=G(Ri)

其中 ,Ri 為一個 0-1 區間內的均勻分布的隨機變量 .

F(X) 較簡單時,求解較易,當 F(X) 較復雜時,需要用到較為復雜的變換技巧。

可能你沒明白 , 看 3.1.1 的例子就一定會明白 .

 

3.1.1 平均分布 :

已知隨機變量密度函數為 :

  公式

3.1.2 指數分布 :

指數分布的分布函數為 :

x<0 時 ,F(x)=0     ; x>=0,F(x)=1-exp(-lamda*x)

利用反函數法,可以求得 :    x=-lnR/lamda( 怎么來的別問 )

 

3.2 正態分布隨機變量的生成 :

正態分布在概率統計的理論及應用中占有重要地位,因此,能產生符合正態分布的隨機變量就在模擬一類的工作中占有相當重要的地位。

下面介紹兩種方法。

3.2.1

    經過一定的計算變行,符合二維的正態分布的隨機變量的生成可按下面的方法進行:

1) 產生位于 0-1 區間上的兩個隨機數 r1 和 r2.

2) 計算 u=2*r1-1,v=2*r2-1 及 w=u^2+v^2

3) 若 w>1 ,則返回 1)

4)    x=u[(-lnw)/w]^(1/2) ( 怎么來的別問 )

       y=v[(-lnw)/w]^(1/2)

如果為 (miu,sigma^2) 正態分布 , 則按上述方法產生 x 后, x’=miu+sigma*x

由于采用基于乘同余法生成的 0-1 上的隨機數的正態分布隨機數始終無法能過正態分布總體均值的假設檢驗。而采用 C 語言的庫函數中的隨機數生成函數 rand() 來產生 0-1 上的隨機數,效果較為理想。

 

3.2.2 利用中心極限定理生成符合正態分布的隨機量:

根據獨立同分布的中心極限定理,有 :

            

   這里,其實只要取 n=12 (這里,亦即生成 12 個 0-1 上的隨機數序列)就會有比較好的效果。

    經驗證,用該種方法生成生的隨機數序列同樣能比較好的符合正態分布特性。

    由于生成的都是標準正態分布,所以,當需要生成 N(a,b) 的正態分布隨機量時,根據正態分布的線性變換特性,只要用 x=a*x0+b 即可。(其中, x0 表示生成的符合 N(0,1) 分布的正態隨機變量。方法 3.1 亦是如此)

實現 :

 



       4 離散型隨機變量的生成 :

    離散型隨機變量的生成主要是希望得到在已知 X 符合某類分布的條件下,生成相應的 X 。


       4.1 符合泊松分布的隨機變量的生成 :

    這里,采用 ” 上限攔截 ” 法進行測試 ,我看了不懂 , 希望有人幫我分析一下 , 從數學角度幫我分析一下,謝謝!


基本的思想是這樣的:

       1 )在泊松分布中,求出 X 取何值時, p(X=k) 取最大值時,設為 Pxmax.

    其時,這樣當于求解 f(x)=lamda^k/k! 在 k 取何值時有最大值,雖然,這道題有一定的難度,但在程序中可以能過一個循環來得到取得 f(x) 取最大值時的整數自變量 Xmax 。

2) 通過迭代,不斷生成 0-1 區間上的隨機數,當隨機數 <Pxmax 時,則終止迭代,否則重復 (2)

3) 記錄迭代過程的次數,即為所需要得到的符何泊松分布的隨機量。

顯然,這種方法較為粗糙,在試驗的過程中發現:生成的的隨機量只能算是近似的服從泊松分布,所以,更為有效的算法還有待嘗試。

實現 : 采用  double 至少可以支持 lamda=700 ,即 exp(-700)!=0

 

 

為防止lamda過大而溢出,故應該自己來寫一個浮點類,我不懂,摘抄的.

  下面是一個簡單的浮點類,還有一個用該浮點類支持的 Exp ,以及簡單的測試   

  可以不用位域,而只用整數來表示 double ,然后用移位來進行轉換   

  這里用位域只是為了簡單和明了(看清 double 的結構)   


4.2符合二項分布的隨機變量的生成:
符合二項分布的隨機變量產生類似上限攔截法,不過效果要好許多,這是由二項分布的特點決定的。
具體方法如下:
設二項分布B(p,n),其中,p為每個單獨事件發生的概率:
關鍵算法:
i=0;reTimes=0
while(i<n)
{
  temp=myrand();//生成0-1區間上的隨機變量
  if(temp>1-p)
          reTimes++;
  i++;
}
顯然,直觀的看來,這種算法將每個獨立的事件當作一個0-1分布來做,生成的0-1區間上的隨機數,若小于1-p則不發生,否則認為發生,這樣的生成方式較為合理。實驗結果也驗證了其合理性。
4.3高斯分布隨機數:貼一個最經典的程序,看程序大概就知道高斯分布函數的反函數了.
#include <stdlib.h>
#include <math.h>
double gaussrand()
{
   static double V1, V2, S;
   static int phase = 0;
   double X;
  
   if ( phase == 0 ) {
       do {
           double U1 = (double)rand() / RAND_MAX;
           double U2 = (double)rand() / RAND_MAX;
          
           V1 = 2 * U1 - 1;
           V2 = 2 * U2 - 1;
           S = V1 * V1 + V2 * V2;
       } while(S >= 1 || S == 0);
      
       X = V1 * sqrt(-2 * log(S) / S);
   } else
       X = V2 * sqrt(-2 * log(S) / S);
      
   phase = 1 - phase;
   return X;
}

 

posted on 2006-11-08 18:52 哈哈 閱讀(14867) 評論(16)  編輯 收藏 引用

評論:
# re: 刻苦學習各種隨機數的產生 2006-11-08 19:39 | 萬連文
不錯啊,我差一篇論文不曉得可以借我不  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2006-11-08 19:45 | pengkuny
@萬連文
拿去吧,呵呵
反正又不是什么創造性的東西
不過要全搞懂的話,還真得看看書  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2006-11-08 20:26 | Asp
崇拜ing....
我也在看隨機數,前幾天才把一個隨機數的頭文件看完的,哇,看了這片文章好受教……
3X......  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2006-11-08 21:43 | chenger
線性同余法不是很好的方法,很多隨機性的測試都通不過。
現在有很多非常好的算法實現,都比較復雜。可以看看W.W.Tsuang的一個lecture,
Random Number Generation and Testing  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2007-06-10 11:15 | Andye
自信人生二百年

彈鍵編程十萬行  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2007-09-13 17:41 | nllnlj'm
;piujiuyhgkgkklkkhfjjn nhoi jjuj'jujuujud.uhhjjuyjju;uju'kjk;ojhijuh/hju/jju8yuj45210//mjmjmj hyhs][uhuuhjhiujuu]ijjkkd]]mjjkk0
++kkjnujjkm xzehujqihrfbJAHHNHUKJBNYUIMHGUKJJ
NHJHNHHJUUFGDIGODACHUndjmmjnk  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2007-09-16 19:04 | ufxjhgf
dzhyxfhts5ftgyyt76 dftrfyttyse  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生[未登錄] 2007-09-22 17:24 | jack
kl,gbjkmvjhjkvh  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2007-09-29 13:44 | 匿名
看了,和EmilMatthew的《隨機數產生原理及應用》一樣,http://blog.csdn.net/EmilMatthew/archive/2006/04/21/672276.aspx誰抄誰的pengkuny心里清楚吧  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2007-09-29 13:47 | 匿名
強烈鄙視抄襲者  回復  更多評論
  
# re: 刻苦學習各種隨機數的產生 2007-09-29 13:53 | fandoei
應該是pengkuny抄襲EmilMatthew的  回復  更多評論
  
# re: [轉載]刻苦學習各種隨機數的產生 2007-10-10 16:10 | pengkuny
@fandoei
是的,已改正。  回復  更多評論
  
# re: [轉載]刻苦學習各種隨機數的產生 2007-11-29 14:12 | mapping
研究這的人好象比較多啊 呵呵  回復  更多評論
  
# re: [轉載]刻苦學習各種隨機數的產生 2008-04-16 17:24 | 孫健
我也在學習隨機數,你能把關于產生隨機數的方法也發給我一份嗎?
bjut-sj@163.com
qq:42563185
msn:anyview@hotmail.com  回復  更多評論
  
# re: [轉載]刻苦學習各種隨機數的產生 2008-05-01 15:14 | xyzwinner
暈。。。我什么也看不懂。。。  回復  更多評論
  
# re: [轉載]刻苦學習各種隨機數的產生 2009-05-03 12:49 | 創意產品
不錯  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲专区一区二区三区| 亚洲国产精品久久久久久女王| 免费观看在线综合| 欧美专区在线观看一区| 欧美大片免费| 久久综合精品国产一区二区三区| 欧美日韩免费观看一区二区三区 | 欧美肉体xxxx裸体137大胆| 久久婷婷色综合| 国产精品自拍三区| 一本久道综合久久精品| 日韩视频欧美视频| 久久久久久久波多野高潮日日 | 久久精品一区二区国产| 欧美三级欧美一级| 亚洲精品久久嫩草网站秘色| 亚洲国产精品第一区二区| 欧美一区二区视频97| 亚洲免费一级电影| 欧美日韩一区高清| 一区二区三区日韩欧美| 中日韩美女免费视频网址在线观看| 麻豆91精品| 欧美国产在线视频| 91久久精品国产91久久性色tv| 久久久久九九九九| 欧美11—12娇小xxxx| 国产婷婷色一区二区三区在线 | 好看的av在线不卡观看| 性欧美xxxx视频在线观看| 亚洲欧美日韩综合| 国产精品丝袜久久久久久app| 亚洲午夜在线视频| 欧美一区二区三区四区在线观看地址 | 亚洲欧洲精品一区二区| 蜜桃伊人久久| 91久久精品一区二区三区| 99热在线精品观看| 欧美日韩综合在线免费观看| 亚洲人成在线播放| 亚洲一级电影| 国产精品入口麻豆原神| 香蕉亚洲视频| 女人天堂亚洲aⅴ在线观看| 亚洲国产精品t66y| 欧美激情一区二区| 亚洲四色影视在线观看| 久久狠狠婷婷| 国产综合欧美| 欧美成人综合在线| 中日韩美女免费视频网站在线观看| 亚洲综合大片69999| 国产一区二区欧美| 欧美91大片| aa级大片欧美三级| 久久综合九色综合久99| 亚洲精品国产精品乱码不99| 欧美午夜影院| 久久米奇亚洲| 亚洲视频一区二区| 欧美成年人视频| 中文在线一区| 精品成人国产| 欧美体内谢she精2性欧美 | 久久久国产精品一区二区中文| 欧美激情一区二区三区不卡| 亚洲资源av| 亚洲黄色尤物视频| 国产精品久久久久一区二区| 久久精品水蜜桃av综合天堂| 亚洲精品视频中文字幕| 久久久一本精品99久久精品66| 亚洲激情在线视频| 国产欧美在线视频| 欧美极品在线观看| 久久精品视频va| 一区二区三区波多野结衣在线观看| 久久久久久久久蜜桃| 亚洲免费av观看| 海角社区69精品视频| 欧美喷水视频| 久久久久久久999| 亚洲一区不卡| 亚洲人成绝费网站色www| 久久久久免费视频| 亚洲欧美日韩在线观看a三区| 亚洲国产一成人久久精品| 国产亚洲精品7777| 欧美午夜精品久久久久久久| 蜜桃av一区二区三区| 欧美一区二区三区在线观看视频| 日韩视频一区二区三区| 亚洲国产精品久久久久秋霞蜜臀 | 欧美国产专区| 久久这里只有| 久久久欧美精品| 午夜视频在线观看一区二区| 艳女tv在线观看国产一区| 亚洲高清在线播放| 一区二区三区在线视频播放| 国产精品免费观看在线| 欧美系列精品| 欧美性猛交99久久久久99按摩| 欧美成人黑人xx视频免费观看| 久久精品视频网| 久久福利毛片| 久久不射电影网| 欧美在线视频免费观看| 先锋资源久久| 午夜精品久久久久久久久久久| 亚洲欧洲日本国产| 亚洲欧洲三级电影| 日韩亚洲欧美中文三级| 亚洲美女毛片| 亚洲伦伦在线| 一区二区三区高清在线| 亚洲国产精品999| 亚洲精品久久久久久一区二区| 亚洲国产精品va在线看黑人 | 亚洲午夜精品久久久久久浪潮| 亚洲精品三级| 一本大道久久精品懂色aⅴ| 日韩亚洲不卡在线| 一区二区欧美日韩视频| 亚洲一区二区三区在线观看视频 | 欧美精品18| 欧美日韩妖精视频| 国产精品爽黄69| 国产一区二区三区成人欧美日韩在线观看| 国产精品亚洲成人| 一区二区三区自拍| 亚洲精品国产日韩| 亚洲午夜久久久久久尤物 | 欧美国产一区视频在线观看| 亚洲国产精品黑人久久久| 日韩视频免费观看高清完整版| 夜夜嗨av一区二区三区| 亚洲欧美日韩区 | 欧美在线黄色| 欧美成人精品不卡视频在线观看| 欧美日韩国产精品一区二区亚洲| 欧美亚一区二区| 国产亚洲va综合人人澡精品| 在线观看日韩av| 亚洲一区二区三区三| 久久久久久伊人| 亚洲国产精品一区二区第四页av | 老司机aⅴ在线精品导航| 欧美黄色一区二区| 中文国产一区| 老司机免费视频一区二区三区| 欧美日韩精品在线视频| 国产婷婷色一区二区三区在线| 亚洲精品免费电影| 久久成人免费日本黄色| 亚洲国产精品va在线观看黑人| 国产精品99久久久久久有的能看| 久久久福利视频| 欧美日韩在线不卡一区| 樱花yy私人影院亚洲| 亚洲曰本av电影| 欧美激情91| 欧美一区二区三区在线看 | 欧美午夜激情视频| 亚洲第一综合天堂另类专| 亚洲桃色在线一区| 欧美高清视频一区二区| 亚洲在线免费观看| 欧美日韩你懂的| 亚洲人成在线播放网站岛国| 欧美在线视频一区二区三区| 亚洲精品美女| 久久久噜噜噜久久人人看| 国产美女高潮久久白浆| 亚洲欧洲精品一区二区三区 | 免费视频亚洲| 香蕉久久久久久久av网站| 国产精品成人午夜| 99视频在线观看一区三区| 欧美成人dvd在线视频| 亚洲欧美在线一区| 国产精品热久久久久夜色精品三区| 亚洲欧洲在线观看| 欧美二区在线| 久久中文在线| 伊人久久成人| 久久久国产91| 性18欧美另类| 国产精品影院在线观看| 亚洲免费婷婷| 亚洲午夜免费视频| 国产精品久在线观看| 亚洲午夜激情网站| 一二三四社区欧美黄| 欧美日韩另类丝袜其他| 亚洲免费观看高清在线观看 | 麻豆国产精品777777在线| 欧美亚洲综合在线| 国产一区免费视频| 狼人天天伊人久久|