1. 程式人生 > >matlab 全部的隨機數函數之內部函數

matlab 全部的隨機數函數之內部函數

等於 stat 對稱軸 圖解 整數 超幾何分布 ati 標準 sset

a. 基本隨機數

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

1rand()

生成(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()函數的作用)

2randn()

生成服從標準正態分布(均值為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內部函數生成符合下面這些分布的隨機數。

3unifrnd()

和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)上面的均勻分布。

4normrnd()

和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軸刻度的不同)。

5chi2rnd()

此函數生成服從卡方(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);

6frnd()

此函數生成服從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正半軸的左側,但是它在極端值處也很可能有一些取值。

7trnd()

此函數生成服從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分布會逐漸變胖,當自由度為正無窮時,它就變成標準正態分布了。

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

8betarnd()

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

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

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

9exprnd()

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

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

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

10gamrnd()

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

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

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

11lognrnd()

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

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

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

12raylrnd()

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

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

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

13wblrnd()

生成服從威布爾(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. 離散型分布隨機數

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

14unidrnd()

此函數生成服從離散均勻分布的隨機數。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);

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

15binornd()

此函數生成服從二項分布的隨機數。二項分布有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萬輪每輪命中成績可能的一種情況。

16geornd()

此函數生成服從幾何分布的隨機數。幾何分布的參數只有一個: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);

17poissrnd()

此函數生成服從泊松(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幫助文檔。

matlab 全部的隨機數函數之內部函數