Matlab内部函数
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列的随机数矩阵
生成的随机数大致的分布。
xrand(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列的随机数矩阵
生成的随机数大致的分布。
xrandn(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)区间内.
生成的随机数大致的分布。
xunifrnd(-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.
生成的随机数大致的分布。
xnormrnd(2,3,100000,1);
hist(x,50);
如图上半部分是由上一行语句生成的均值为2标准差为3的10万个随机数的大致分布下半部分是用小节“randn()”中最后那段语句生成10万个标准正态分布随机数的大致分布。
注意到上半个图像的对称轴向正方向偏移准确说移动到x2处这是由于均值为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
生成的随机数大致的分布。
xchi2rnd(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列的随机数矩阵
%注上述语句生成的随机数所服从的参数为(v13,v25)的F分布
生成的随机数大致的分布。
xfrnd(3,5,100000,1);
hist(x,50);
从结果可以看出来 F分布集中在x正半轴的左侧但是它在极端值处也很可能有一些取值。
7trnd()
此函数生成服从t(Students 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列的随机数矩阵
%注上述语句生成的随机数所服从的参数为(v7)的t分布
生成的随机数大致的分布。
xtrnd(7,100000,1);
hist(x,50);
可以发现t分布比标准正太分布要“瘦”不过随着自由度v的增大t分布会逐渐变胖当自由度为正无穷时它就变成标准正态分布了。
接下来的分布相对没有这么常用同时这些函数的语法和前面函数语法相同所以写得就简略一些——在视频中也不会讲述你只需按照前面那几个分布的语法套用即可应该不会有任何困难——时间足够的话这是一个不错的练习机会。
8betarnd()
此函数生成服从Beta分布的随机数。Beta分布有两个参数分别是A和B。下图是A2,B5 的beta分布的PDF图形。
生成beta分布随机数的语法是
betarnd(A,B,[M,N,P,...])
9exprnd()
此函数生成服从指数分布的随机数。指数分布只有一个参数: mu, 下图是mu3时指数分布的PDF图形
生成指数分布随机数的语法是
betarnd(mu,[M,N,P,...])
10gamrnd()
生成服从Gamma分布的随机数。Gamma分布有两个参数A和B。下图是A2,B5 Gamma分布的PDF图形
生成Gamma分布随机数的语法是
gamrnd(A,B,[M,N,P,...])
11lognrnd()
生成服从对数正态分布的随机数。其有两个参数mu和sigma服从这个这样的随机数取对数后就服从均值为mu标准差为sigma的正态分布。下图是mu-1, sigma1/1.2的对数正态分布的PDF图形。
生成对数正态分布随机数的语法是
lognrnd(mu,sigma,[M,N,P,...])
12raylrnd()
生成服从瑞利Rayleigh分布的随机数。其分布有1个参数B。下图是B2的瑞利分布的PDF图形。
生成瑞利分布随机数的语法是
raylrnd(B,[M,N,P,...])
13wblrnd()
生成服从威布尔Weibull分布的随机数。其分布有2个参数scale 参数 A和shape 参数 B。下图是A3B2的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)的二项分布
生成的随机数大致的分布。
xunidrnd(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)的二项分布
生成的随机数大致的分布。
xbinornd(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)的二项分布
生成的随机数大致的分布。
xgeornd(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)的泊松分布
生成的随机数大致的分布。
xpoissrnd(2,100000,1);
hist(x,50);
其他离散分布还有超几何分布(Hyper-geometric, 函数是hygernd)等详细见Matlab帮助文档。