深圳 電子商務(wù)網(wǎng)站開發(fā)青島網(wǎng)站推廣公司排名
1 真隨機(jī)數(shù)
真正意義上的隨機(jī)數(shù)(或者隨機(jī)事件)在某次產(chǎn)生過(guò)程中是按照實(shí)驗(yàn)過(guò)程中表現(xiàn)的分布概率隨機(jī)產(chǎn)生的,其結(jié)果是不可預(yù)測(cè)的,是不可見的。使用物理性隨機(jī)數(shù)發(fā)生器生成的真隨機(jī)數(shù),可以說(shuō)是完美再現(xiàn)了生活中的真正的“隨機(jī)”,也可以稱為絕對(duì)的公平,絕對(duì)的隨機(jī)數(shù)。
2 偽隨機(jī)數(shù)
實(shí)際上,絕對(duì)隨機(jī)的隨機(jī)數(shù)只是一種理想的隨機(jī)數(shù),即使計(jì)算機(jī)怎樣發(fā)展,它也不會(huì)產(chǎn)生一串絕對(duì)隨機(jī)的隨機(jī)數(shù)。計(jì)算機(jī)只能生成相對(duì)的隨機(jī)數(shù),即偽隨機(jī)數(shù),“偽”代表有規(guī)律。
只不過(guò)這個(gè)規(guī)律周期比較長(zhǎng),但還是可以預(yù)測(cè)的。主要原因就是偽隨機(jī)數(shù)是計(jì)算機(jī)使用算法模擬出來(lái)的,這個(gè)過(guò)程并不涉及到物理過(guò)程,所以自然不可能具有真隨機(jī)數(shù)的特性。
3 (偽)隨機(jī)數(shù)的產(chǎn)生
(偽)隨機(jī)數(shù)是由“隨機(jī)種子”產(chǎn)生的,隨機(jī)種子是用來(lái)產(chǎn)生隨機(jī)數(shù)的一個(gè)數(shù),在計(jì)算機(jī)中,這樣的一個(gè)“隨機(jī)種子”是一個(gè)無(wú)符號(hào)整形數(shù)。
隨機(jī)種子來(lái)自系統(tǒng)時(shí)鐘,確切地說(shuō),是來(lái)自計(jì)算機(jī)主板上的定時(shí)/計(jì)數(shù)器在內(nèi)存中的記數(shù)值。
1.計(jì)算機(jī)的偽隨機(jī)數(shù)是由隨機(jī)種子根據(jù)一定的計(jì)算方法計(jì)算出來(lái)的數(shù)值。所以,只要計(jì)算方法一定,隨機(jī)種子一定,那么產(chǎn)生的隨機(jī)數(shù)就是固定的。
2.只要用戶或第三方不設(shè)置隨機(jī)種子,那么在默認(rèn)情況下隨機(jī)種子來(lái)自系統(tǒng)時(shí)鐘。
4 (偽)隨機(jī)數(shù)發(fā)生函數(shù)
4.1 rand和 randn的區(qū)別
MATLAB中有兩個(gè)經(jīng)常會(huì)用到的(偽)隨機(jī)數(shù)發(fā)生(器)函數(shù):rand與randn。rand函數(shù)——生成均勻分布偽隨機(jī)數(shù)。randn函數(shù)——生成正態(tài)分布偽隨機(jī)數(shù)。
a、rand 生成均勻分布的偽隨機(jī)數(shù)。分布在(0~1)之間
主要語(yǔ)法:rand(m,n)生成m行n列的均勻分布的偽隨機(jī)數(shù)
rand(m,n,‘double’)生成指定精度的均勻分布的偽隨機(jī)數(shù),參數(shù)還可以
是’single’。
b、randn 生成標(biāo)準(zhǔn)正態(tài)分布的偽隨機(jī)數(shù)(均值為0,方差為1)
主要語(yǔ)法:和上面一樣
seed、state、twister是產(chǎn)生隨機(jī)數(shù)的不同算法。seed表示采用v4版本的隨機(jī)數(shù)產(chǎn)生器,state是v5版本的隨機(jī)數(shù)產(chǎn)生器,最后的twister用的則是Mersenne Twister隨機(jī)數(shù)產(chǎn)生器。
4.2 randn命令中randn(‘state‘)和randn(‘seed‘)
例如,randn(‘seed’,S)和randn(‘state’,S),S是表示初始狀態(tài)的整數(shù)。
>> randn('seed',100)%seed表示采用v4版本的隨機(jī)數(shù)產(chǎn)生器,100表明選定了一個(gè)初狀態(tài)
>> x=randn(1,6)%再定義隨機(jī)數(shù)列x=randn(1,6),1行6列,x的值會(huì)確定下來(lái)x =-0.0572 -0.5738 -0.2066 0.3955 0.6380 -0.3452>> x=randn(1,6)x =-0.0410 -0.4511 0.3560 0.8854 -0.6551 -1.5812>> x=randn(1,6)x =-1.9002 -0.6726 -0.9943 0.1582 0.6838 -0.5364>> randn('seed',100)
>> x=randn(1,6)x =-0.0572 -0.5738 -0.2066 0.3955 0.6380 -0.3452>> x=randn(1,6)x =-0.0410 -0.4511 0.3560 0.8854 -0.6551 -1.5812
可以看到,相同的種子,產(chǎn)生完全一樣的隨機(jī)數(shù),設(shè)定初始狀態(tài)的好處是,只需要保存那時(shí)的初始狀態(tài)再運(yùn)行一遍程序你就可以重現(xiàn)之前的計(jì)算過(guò)程和結(jié)果。
缺點(diǎn)是雖然程序使用了隨機(jī)數(shù),但由于(每次啟動(dòng)后)初始狀態(tài)一樣,實(shí)際運(yùn)行出來(lái)卻是相同的重復(fù)過(guò)程,你需要人工設(shè)定一個(gè)保證隨機(jī)性的初始狀態(tài)。
randn(‘state’,S)亦如此
>> randn('state',100)%seed表示采用v4版本的隨機(jī)數(shù)產(chǎn)生器,100表明選定了一個(gè)初狀態(tài)
>> x=randn(1,6)%再定義隨機(jī)數(shù)列x=randn(1,6),1行6列,x的值會(huì)確定下來(lái)x =0.9085 -2.2207 -0.2391 0.0687 -2.0202 -0.3641>> x=randn(1,6)x =-0.0813 -1.9797 0.7882 0.7366 0.9553 1.9295>> x=randn(1,6)x =-0.7453 -0.8984 -3.2625 -0.0300 0.6134 1.0446>> randn('state',100)
>> x=randn(1,6)x =0.9085 -2.2207 -0.2391 0.0687 -2.0202 -0.3641>> x=randn(1,6)x =-0.0813 -1.9797 0.7882 0.7366 0.9553 1.9295
也就是說(shuō)只要’S’是一定的,偽隨機(jī)數(shù)是一樣的。
一般情況下,偽隨機(jī)數(shù)已經(jīng)夠用,但是想通過(guò)程序獲得嚴(yán)格并且嚴(yán)肅的統(tǒng)計(jì)結(jié)果,一個(gè)真正的隨機(jī)數(shù)生成器還是必要的。又比如,如果你是在設(shè)計(jì)一個(gè)大規(guī)模的抽獎(jiǎng)程序的話,使用偽隨機(jī)數(shù)肯定會(huì)被人質(zhì)疑。所以大家玩各種抽獎(jiǎng)游戲的時(shí)候,大可不必?fù)?dān)心商家會(huì)虧錢!