Matlab 1 隨機函式rand使用的技巧

2022-07-18 09:57:20 字數 967 閱讀 3243

由於我的演算法中的引數初始值是在一定範圍內隨機給的,老闆說要多跑幾次計算結果的均值和方差以減小隨機性帶來的影響,我跑了十遍發現結果怎麼都一樣,原來是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));

rand隨機函式

1 使用該函式首先應在開頭包含標頭檔案cstdlib include 2 在標準的c庫中函式rand 可以生成0 rand max之間的乙個隨機數,其中rand max 是cstdlib中定義的乙個整數,它與系統有關。3 rand 函式沒有輸入引數,直接通過表示式rand 來引用 例如可以用下面的語...

rand 隨機函式

筆記 rand 函式產生隨機數,會返回乙個0到rand max 32767 之間的偽隨機數,在呼叫rand 函式前,可以使用srand 函式設定隨機數種子 但如果沒有設定隨機函式種子,rand 函式呼叫時,自動設計隨機種子為1,隨機種子相同,每次產生的隨機數也相同 一般可以通過rand time n...

小白 美朵 學習matlab 1

小白 美朵 學習matlab作圖 1 單純的安裝matlab推薦matlab安裝 matlab提供了非常完善的幫助系統。使用者可以通過查詢幫助系統,獲取函式的呼叫情況和需要的資訊。對於任何matlab的使用者,都必須學會使用matlab的幫助系統,因為沒有人能夠清楚地記住上萬個不同函式的呼叫情況,所...