Matlab(mathworks.com)随机数生成方法(转自雅虎空间)第一种方法是用random语句,其一般形式为y=random('分布的英文名',A1,A2,A3,m,n),表示生成m行n列的m×n个参数为(A1,A2,A3)的该分布的随机数。例如:(1)R=random('Normal',0,1,2,4):生成期望为0,标准差为1的(2行4列)2×4个正态随机数(2)R=random('Poisson',1:6,1,6):依次生成参数为1到6的(1行6列)6个Poisson随机数第二种方法是针对特殊的分布的语句:一.几何分布随机数(下面的P,m都可以是矩阵)R=geornd(P)(生成参数为P的几何随机数)R=geornd(P,m)(生成参数为P的×m个几何随机数)1R=geornd(P,m,n)(生成参数为P的m行n列的m×n个几何随机数)例如(1)R=geornd(1./2.^(1:6))(生成参数依次为1/2,1/2^2,到1/2^6的6个几何随机数)(2)R=geornd(0.01,[15])(生成参数为0.01的(1行5列)5个几何随机数).二.Beta分布随机数R=betarnd(A,B)(生成参数为A,B的Beta随机数)R=betarnd(A,B,m)(生成×m个数为A,B的Beta随机数)1R=betarnd(A,B,m,n)(生成m行n列的m×n个数为A,B的Beta随机数).三.正态随机数R=normrnd(MU,SIGMA)(生成均值为MU,标准差为SIGMA的正态随机数)R=normrnd(MU,SIGMA,m)(生成1×m个正态随机数)R=normrnd(MU,SIGMA,m,n)(生成m行n列的m×n个正态随机数)例如(1)R=normrnd(0,1,[15])生成5个正态(0,1)随机数(2)R=normrnd([123;456],0.1,2,3)生成期望依次为[1,2,3;4,5,6],方差为0.1的2×3个正态随机数.四.二项随机数:类似地有R=binornd(N,P)R=binornd(N,P,m)R=binornd(N,p,m,n)例如n=10:10:60;r1=binornd(n,1./n)或r2=binornd(n,1./n,[16])(都生成参数分别为11),L,(60,)的6个二项随机数.(10,1060五.自由度为V的χ2随机数:R=chi2rnd(V)R=chi2rnd(VR=chi2rnd(V,m),m,n)六.期望为MU的指数随机数(即Exp随机数):1MUR=exprnd(MU)R=exprnd(MU,m)R=exprnd(MU,m,n)七.自由度为V1,V2的F分布随机数:R=frnd(V1,V2)R=frnd(V1,V2,m)R=frnd(V1,V2,m,n)八.Γ(A,λ)随机数:R=gamrnd(A,lambda)R=gamrnd(A,lambda,m)R=gamrnd(A,lambda,m,n)九.超几何分布随机数:R=hygernd(N,K,M)R=hygernd(N,K,M,m)R=hygernd(N,K,M,m,n)十.对数正态分布随机数R=lognrnd(MU,SIGMA)R=lognrnd(MU,SIGMA,m)R=lognrnd(MU,SIGMA,m,n)十一.负二项随机数:R=nbinrnd(r,p)R=nbinrnd(r,p,m)R=nbinrnd(r,p,m,n)十二.Poisson随机数:R=poissrnd(lambda)R=poissrnd(lambda,m)R=poissrnd(lambda,m,n)例如,以下3种表达有相同的含义:lambda=2;R=poissrnd(lambda,1,10)(或R=poissrnd(lambda,[110])或R=poissrnd(lambda(ones(1,10)))十三.Rayleigh随机数:R=raylrnd(B)R=raylrnd(B,m)R=raylrnd(B,m,n)十四.V个自由度的t分布的随机数:R=trnd(V)R=trnd(V,m)R=trnd(V,m,n)42十五.离散的均匀随机数:R=unidrnd(N)R=unidrnd(N,m)R=unidrnd(N,m,n)十六.[A,B]上均匀随机数R=unifrnd(A,B)R=unifrnd(A,B,m)R=unifrnd(A,B,m,n)例如unifrnd(0,1:6)与unifrnd(0,1:6,[16])都依次生成[0,1]到[0,6]的6个均匀随机数.:十七.Weibull随机数R=weibrnd(A,B)R=weibrnd(A,B,m)R=weibrnd(A,B,m,n)Matlab随机数小结1,rand生成均匀分布的伪随机数。分布在(0~1)之间语法:rand(m,n)生成m行n列的均匀分布的伪随机数rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'rand(RandStream,m,n)利用指定的RandStream生成伪随机数2,randn生成标准正态分布的伪随机数(均值为0,方差为1)主要语法:和上面一样3,randi生成均匀分布的伪随机整数主要语法:randi(iMax)在开区间[1,iMax]上生成均匀分布的伪随机整数randi(iMax,m,n)在开区间[1,iMax]生成mXn型随机矩阵r=randi([iMin,iMax],m,n)在开区间[iMin,iMax]生成mXn型随机矩阵以上3个函数都是根据标准伪随机数发生器的内部状态产生的,所以如果把发生器设置为初始状态,会得到相同的随机数,但如果改变了状态,得到的结果就是不同的;而在matlab打开时,发生器复位到初始状态,所以用上面3个函数得到的结果将是一样的如我的matlab在打开时输入以下命令将得到相同的随机数:randn(3)ans=0.5376671395461000.862173320368121-0.4335920223056841.8338850145950870.3187652398589810.342624466538650-2.258846861003648-1.3076882963052733.578396939725761randn(3)ans=2.7694370298848770.725404224946106-0.204966058299775-1.349886940156521-0.063054873189656-0.1241443482163123.0349234663318550.7147429038260961.489697607785465randn(3)ans=1.409034489800479-1.2074869226850380.4888937703117891.4171924134296140.7172386513288381.0346930099178600.6714971336080811.6302352891647290.726885133383238如果想将发生器复位到一个固定状态,可以使用如下命令randn('seed',0);randn(3)以上两条命令将总是得到一样的随机数。上述命令已经在7.7以后摒弃了(但仍可继续用),7.7以后可以使用randstream函数,如下reset(RandStream.getDefaultStream)一般情况下,随机数都是从默认随机数流中得到数据的,而可以创建自己的数据流对象,并可以从自己的数据流对象中得到随机数,详见randstream函数。如果希望matlab在不同程序段产生不同的随机数据,可以将默认数据流设置为基于时钟的,方法为RandStream.setDefaultStream...(RandStream('mt19937ar','seed',sum(100*clock)));normrnd是自己可以指定均数和标准差的正态分布。另外,Matlab随机数生成函数主要包括:betarnd贝塔分布的随机数生成器binornd二项分布的随机数生成器chi2rnd卡方分布的随机数生成器exprnd指数分布的随机数生成器frndf分布的随机数生成器gamrnd伽玛分布的随机数生成器geornd几何分布的随机数生成器hygernd超几何分布的随机数生成器lognrnd对数正态分布的随机数生成器nbinrnd负二项分布的随机数生成器ncfrnd非中心f分布的随机数生成器nctrnd非中心t分布的随机数生成器ncx2rnd非中心卡方分布的随机数生成器normrnd正态(高斯)分布的随机数生成器poissrnd泊松分布的随机数生成器raylrnd瑞利分布的随机数生成器trnd学生氏t分布的随机数生成器unidrnd离散均匀分布的随机数生成器unifrnd连续均匀分布的随机数生成器weibrnd威布尔分布的随机数生成器matlab全部的随机数函数(一)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(64,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.连续型分布随机数如果你安装了统计工具箱(StatisticToolbox),除了这两种基本分布外,还可以用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列的随机数矩阵n