Matlab(1): 隨機函數rand使用的技巧


由於我的算法中的參數初始值是在一定范圍內隨機給的,老板說要多跑幾次計算結果的均值和方差以減小隨機性帶來的影響,我跑了十遍發現結果怎么都一樣,原來是rand出了問題。

 

1. MATLAB中的rand產生的是0到1(不包括1)的隨機數,rand函數生成的是偽隨機數,是由種子遞推出來的,相同的種子,生成相同的隨機數。

2. MATLAB剛運行起來的時候,種子都為初始值,所以每次重啟MATLAB的時候,Rand的狀態都被重置(相當於把序列的指針移到了隨機數序列的開始),因此每次第一次執行rand得到的隨機數都是相同的。

實驗:打開MATLAB,用rand(1)跑一下。關掉MATLAB再打開一次,再用rand(1)跑一下。結果確實是一樣的。

 

一般來說有兩種需求:

(1)多次運行,生成相同隨機數

       演示需求,比如示例程序,希望每一個跑這段程序的人都能和示例得到一樣的結果,那么就需要大家的rand產生的值是一樣的。

       方法:

       用rand('state',s)設定種子,s為35階向量,最簡單的設為0就好。

       例:rand('state',0); rand(1);

(2)多次運行,生成不同隨機數

       比如像我這樣子跑實驗,希望盡可能是產生的隨機數,不希望每次重啟MATLAB都是一樣的。

       方法:

       用rand('state',sum(100*clock))產生和時間相關的種子,種子與計算機當前的時鍾時間有關,如果計算機的時間相同,生成的隨機數還是會相同。

       在你計算機速度足夠快的情況下,試運行一下:

       rand('state',sum(100*clock));A=rand(5,5);rand('state',sum(100*clock));B=rand(5,5);

       A和B是相同.

       所以還可以再增加一個隨機變量,變成:

       rand('state',sum(100*clock)*rand(1));

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM