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幫助文檔。
matlab 全部的隨機數函數之內部函數