2015-09-27 160 views
-2

如何生成0到1之間的100個隨機數並凍結使其無法更改?我想用MATLAB。我用Excel生成,但它不斷變化,所以我厭倦了這些不斷的變化。我有10個變量,並且必須爲每個變量生成0到1之間的100個隨機數。我也需要將這些生成的數字導出到Excel中。對你的幫助表示感謝。生成0到1之間的100個隨機數並凍結它

+0

那麼,我想說的是在0和1之間生成100個數字,所以1,2,3,... 100和這個數字中的每一個都將具有介於0和1之間的值?謝謝 –

+0

我不明白你的意思是「凍結它」。一個變量不會改變,除非你寫了,或者你要求可重複的隨機數?如果是這樣,請閱讀文檔中的「種子」。 – Daniel

回答

1

第1部分:生成可重複的隨機量

我認爲凍結你的意思是,在程序的不同運行隨機數發生器,產生「隨機」相同的數字序列。

這已經在MATLAB中使用命令rng照顧。

此函數所需的唯一參數是種子的值。在您的情況下,您可以使用default值,以便每次運行代碼時將算法參數設置爲默認值。因此,它會一遍又一遍地產生相同的數字序列。

rng('default')將rand,randi和randn使用的隨機數生成器的設置設置爲默認值。這樣,就像重新啓動MATLAB一樣生成相同的隨機數。默認設置是Mersenne扭曲與種子0

實施例:

>> rng('default'); 
>> A = rand(1,10) 

A = 

    0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469 0.9575 0.9649 

>> B = rand(1,10) 

B = 

    0.1576 0.9706 0.9572 0.4854 0.8003 0.1419 0.4218 0.9157 0.7922 0.9595 

>> rng('default'); 
>> B = rand(1,10) 

B = 

    0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469 0.9575 0.9649 

所以,在本例中,首先使用default參數生成A變量。另一方面,第二個參數B是在不重置隨機發生器的參數的情況下生成的,因此它與A不同。通過將參數重置爲默認值,您可以獲得第一個變量的相同結果。

rand命令爲您提供的數字均勻分佈在[0,1]上,並且使用rbg('default')您將會一次又一次地獲得相同的序列。

所以根據MATLAB,你生成可重複的隨機數


第2部分:在Excel中

很容易寫,你只需要使用MATLAB功能xlswrite。在這裏檢查文檔。並且有一個例子:

xlswrite('myExcel.xlsx',A); 
0

軟件生成的隨機數不是真正的隨機數,而是僞隨機數。在不深入研究技術細節的情況下,從種子值生成僞隨機數序列,並且大多數語言/操作系統將初始種子設置爲從運行到運行變化的事物,通常與系統的內部時鐘有關,或者隨機數發生器的前一次運行。因此,如果兩次運行相同的程序,大多數系統的默認行爲會給您不同的結果。

出於調試目的,這通常是不可取的,所以大多數系統通常會給你一個明確設置種子的方法。在Matlab中,可以使用rng(種子)將種子設置回默認值,或者在需要時將其設置爲特定的數字,例如十個不同的隨機數字可重複運行,以說服您自己的算法是正確的。 (即,rng(1)然後運行你的軟件; rng(2)並用不同的隨機數運行軟件得到不同的結果; rng(1)準確重複第一次運行等)

Excel在兩方面有點不同。首先,每次進行更新時,Excel會假定您要更新整個電子表格中的所有內容,包括所有對隨機數生成器的調用,這會導致您看到的刷新。其次,據我所知,沒有辦法設置或重置種子。在Excel中通常的黑客攻擊是可怕的 - 生成隨機數字,然後將結果作爲特殊值(只複製數字,而不是公式)複製到需要它們的位置。

使用這些技術時要非常小心。它們對於調試是完全合法的,但是如果將它們合併到一個程序中並忘記刪除它們,那麼以後您將非常不高興。

相關問題