【matlab程式設計】matlab隨機數函式

nineheaded_bird發表於2014-03-11

Matlab內部函式

a. 基本隨機數

Matlab中有兩個最基本生成隨機數的函式。

1.rand()

生成(0,1)區間上均勻分佈的隨機變數。基本語法:

rand([M,N,P ...])

生成排列成M*N*P... 多維向量的隨機數。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

rand(5,1) %生成5個隨機數排列的列向量,一般用這種格式

rand(5) %生成5行5列的隨機數矩陣

rand([5,4]) %生成一個5行4列的隨機數矩陣

生成的隨機數大致的分佈。

x=rand(100000,1);

hist(x,30);

由此可以看到生成的隨機數很符合均勻分佈。(視訊教程會略提及hist()函式的作用)

2.randn()

生成服從標準正態分佈(均值為0,方差為1)的隨機數。基本語法和rand()類似。

randn([M,N,P ...])

生成排列成M*N*P... 多維向量的隨機數。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

randn(5,1) %生成5個隨機數排列的列向量,一般用這種格式

randn(5) %生成5行5列的隨機數矩陣

randn([5,4]) %生成一個5行4列的隨機數矩陣

生成的隨機數大致的分佈。

x=randn(100000,1);

hist(x,50);

由圖可以看到生成的隨機數很符合標準正態分佈。

b. 連續型分佈隨機數

如果你安裝了統計工具箱(Statistic Toolbox),除了這兩種基本分佈外,還可以用Matlab內部函式生成符合下面這些分佈的隨機數。

3.unifrnd()

和rand()類似,這個函式生成某個區間內均勻分佈的隨機數。基本語法

unifrnd(a,b,[M,N,P,...])

生成的隨機數區間在(a,b)內,排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

unifrnd(-2,3,5,1) %生成5個隨機數排列的列向量,一般用這種格式

unifrnd(-2,3,5) %生成5行5列的隨機數矩陣

unifrnd(-2,3,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數都在(-2,3)區間內.

生成的隨機數大致的分佈。

x=unifrnd(-2,3,100000,1);

hist(x,50);

由圖可以看到生成的隨機數很符合區間(-2,3)上面的均勻分佈。

4.normrnd()

和randn()類似,此函式生成指定均值、標準差的正態分佈的隨機數。基本語法

normrnd(mu,sigma,[M,N,P,...])

生成的隨機數服從均值為mu,標準差為sigma(注意標準差是正數)正態分佈,這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

normrnd(2,3,5,1) %生成5個隨機數排列的列向量,一般用這種格式

normrnd(2,3,5) %生成5行5列的隨機數矩陣

normrnd(2,3,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的正態分佈都是均值為2,標準差為3.

生成的隨機數大致的分佈。

x=normrnd(2,3,100000,1);

hist(x,50);

 

 

如圖,上半部分是由上一行語句生成的均值為2,標準差為3的10萬個隨機數的大致分佈,下半部分是用小節“randn()”中最後那段語句生成10萬個標準正態分佈隨機數的大致分佈。

注意到上半個影像的對稱軸向正方向偏移(準確說移動到x=2處),這是由於均值為2的結果。

而且,由於標準差是3,比標準正態分佈的標準差(1)要高,所以上半部分圖形更胖(注意x軸刻度的不同)。

5.chi2rnd()

此函式生成服從卡方(Chi-square)分佈的隨機數。卡方分佈只有一個引數:自由度v。基本語法

chi2rnd(v,[M,N,P,...])

生成的隨機數服從自由度為v的卡方分佈,這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

chi2rnd(5,5,1) %生成5個隨機數排列的列向量,一般用這種格式

chi2rnd(5,5) %生成5行5列的隨機數矩陣

chi2rnd(5,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的卡方分佈的自由度都是5

生成的隨機數大致的分佈。

x=chi2rnd(5,100000,1);

hist(x,50);

6.frnd()

此函式生成服從F分佈的隨機數。F分佈有2個引數:v1, v2。基本語法

frnd(v1,v2,[M,N,P,...])

生成的隨機數服從引數為(v1,v2)的卡方分佈,這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

frnd(3,5,5,1) %生成5個隨機數排列的列向量,一般用這種格式

frnd(3,5,5) %生成5行5列的隨機數矩陣

frnd(3,5,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的引數為(v1=3,v2=5)的F分佈

生成的隨機數大致的分佈。

x=frnd(3,5,100000,1);

hist(x,50);

從結果可以看出來, F分佈集中在x正半軸的左側,但是它在極端值處也很可能有一些取值。

7.trnd()

此函式生成服從t(Student's t Distribution,這裡Student不是學生的意思,而是Cosset.W.S.的筆名)分佈的隨機數。t分佈有1個引數:自由度v。基本語法

trnd(v,[M,N,P,...])

生成的隨機數服從引數為v的t分佈,這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

trnd(7,5,1) %生成5個隨機數排列的列向量,一般用這種格式

trnd(7,5) %生成5行5列的隨機數矩陣

trnd(7,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的引數為(v=7)的t分佈

生成的隨機數大致的分佈。

x=trnd(7,100000,1);

hist(x,50);

可以發現t分佈比標準正太分佈要“瘦”,不過隨著自由度v的增大,t分佈會逐漸變胖,當自由度為正無窮時,它就變成標準正態分佈了。

接下來的分佈相對沒有這麼常用,同時這些函式的語法和前面函式語法相同,所以寫得就簡略一些——在視訊中也不會講述,你只需按照前面那幾個分佈的語法套用即可,應該不會有任何困難——時間足夠的話這是一個不錯的練習機會。

8.betarnd()

此函式生成服從Beta分佈的隨機數。Beta分佈有兩個引數分別是A和B。下圖是A=2,B=5 的beta分佈的PDF圖形。

 

生成beta分佈隨機數的語法是:

betarnd(A,B,[M,N,P,...])

9.exprnd()

此函式生成服從指數分佈的隨機數。指數分佈只有一個引數: mu, 下圖是mu=3時指數分佈的PDF圖形

 

生成指數分佈隨機數的語法是:

betarnd(mu,[M,N,P,...])

10.gamrnd()

生成服從Gamma分佈的隨機數。Gamma分佈有兩個引數:A和B。下圖是A=2,B=5 Gamma分佈的PDF圖形

 

生成Gamma分佈隨機數的語法是:

gamrnd(A,B,[M,N,P,...])

11.lognrnd()

生成服從對數正態分佈的隨機數。其有兩個引數:mu和sigma,服從這個這樣的隨機數取對數後就服從均值為mu,標準差為sigma的正態分佈。下圖是mu=-1, sigma=1/1.2的對數正態分佈的PDF圖形。

 

生成對數正態分佈隨機數的語法是:

lognrnd(mu,sigma,[M,N,P,...])

12.raylrnd()

生成服從瑞利(Rayleigh)分佈的隨機數。其分佈有1個引數:B。下圖是B=2的瑞利分佈的PDF圖形。

生成瑞利分佈隨機數的語法是:

raylrnd(B,[M,N,P,...])

13.wblrnd()

生成服從威布林(Weibull)分佈的隨機數。其分佈有2個引數:scale 引數 A和shape 引數 B。下圖是A=3,B=2的Weibull分佈的PDF圖形。

 

生成Weibull分佈隨機數的語法是:

wblrnd(A,B,[M,N,P,...])

還有非中心卡方分佈(ncx2rnd),非中心F分佈(ncfrnd),非中心t分佈(nctrnd),括號中是生成服從這些分佈的函式,具體用法用:

help 函式名

查詢。

c. 離散型分佈隨機數

離散分佈的隨機數可能的取值是離散的,一般是整數。

14.unidrnd()

此函式生成服從離散均勻分佈的隨機數。Unifrnd是在某個區間內均勻選取實數(可為小數或整數),Unidrnd是均勻選取整數隨機數。離散均勻分佈隨機數有1個引數:n, 表示從{1, 2, 3, ... N}這n個整數中以相同的概率抽樣。基本語法:

unidrnd(n,[M,N,P,...])

這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

unidrnd(5,5,1) %生成5個隨機數排列的列向量,一般用這種格式

unidrnd(5,5) %生成5行5列的隨機數矩陣

unidrnd(5,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的引數為(10,0.3)的二項分佈

生成的隨機數大致的分佈。

x=unidrnd(9,100000,1);

hist(x,9);

可見,每個整數的取值可能性基本相同。

15.binornd()

此函式生成服從二項分佈的隨機數。二項分佈有2個引數:n,p。考慮一個打靶的例子,每槍命中率為p,共射擊N槍,那麼一共擊中的次數就服從引數為(N,p)的二項分佈。注意p要小於等於1且非負,N要為整數。基本語法:

binornd(n,p,[M,N,P,...])

生成的隨機數服從引數為(N,p)的二項分佈,這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

binornd(10,0.3,5,1) %生成5個隨機數排列的列向量,一般用這種格式

binornd(10,0.3,5) %生成5行5列的隨機數矩陣

binornd(10,0.3,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的引數為(10,0.3)的二項分佈

生成的隨機數大致的分佈。

x=binornd(10,0.45,100000,1);

hist(x,11);

我們可以將此直方圖解釋為,假設每槍射擊命中率為0.45,每論射擊10次,共進行10萬輪,這個圖就表示這10萬輪每輪命中成績可能的一種情況。

16.geornd()

此函式生成服從幾何分佈的隨機數。幾何分佈的引數只有一個:p。幾何分佈的現實意義可以解釋為,打靶命中率為p,不斷地打靶,直到第一次命中目標時沒有擊中次數之和。注意p是概率,所以要小於等於1且非負。基本語法:

geornd(p,[M,N,P,...])

這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

geornd(0.4,5,1) %生成5個隨機數排列的列向量,一般用這種格式

geornd(0.4,5) %生成5行5列的隨機數矩陣

geornd(0.4,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的引數為(0.4)的二項分佈

生成的隨機數大致的分佈。

x=geornd(0.4,100000,1);

hist(x,50);

17.poissrnd()

此函式生成服從泊松(Poisson)分佈的隨機數。泊松分佈的引數只有一個:lambda。此引數要大於零。基本語法:

geornd(p,[M,N,P,...])

這些隨機數排列成M*N*P... 多維向量。如果只寫M,則生成M*M矩陣;如果引數為[M,N]可以省略掉方括號。一些例子:

poissrnd(2,5,1) %生成5個隨機數排列的列向量,一般用這種格式

poissrnd(2,5) %生成5行5列的隨機數矩陣

poissrnd(2,[5,4]) %生成一個5行4列的隨機數矩陣

%注:上述語句生成的隨機數所服從的引數為(2)的泊松分佈

生成的隨機數大致的分佈。

x=poissrnd(2,100000,1);

hist(x,50);

其他離散分佈還有超幾何分佈(Hyper-geometric, 函式是hygernd)等,詳細見Matlab幫助文件。

相關文章