MATLAB随机函数比较

rand

rand生成均匀分布的伪随机数。分布在(0~1)之间
主要语法:

  • rand(m,n)生成m行n列的均匀分布的伪随机数
  • rand(m,n,’double’)生成指定精度的均匀分布的伪随机数,参数还可以是’single’
  • rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数

如果需要产生随机数值不是介于[0,1]区间,可以采用以下步骤将随机数值从[0,1]区间转换到其它区间。假设要得到一组随机数值是介于[2,4]区间,我们先产生一组随机数介于[0,1]区间,再将其值乘以2,因为2等于区间上下限的差值(4-2)。接著再加上下限值(2),即可得到随机数值是介于[2,4]区间。例如区间为[a,b],a为下限值,b为上限值。则算式如下

  • x=(b-a)*r+a,

其中x代表转换后的随机数值的阵列

randn

randn生成标准正态分布的伪随机数(均值为0,方差为1)
主要语法:和上面一样

如果需要产生常态随机数值的平均值和方差并非0和1,可以采用以下步骤将平均值和方差做转换。假设要得到一组常态随机数值的平均值为b和方差为a,我们先产生一组随机数r,再将其值乘以方差a。接著再加平均值b。算式如下:

  • x=a*r+b

其中x代表转换后的随机数值的阵列

randi

randi生成均匀分布的伪随机整数
主要语法:

  • randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
  • randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵
  • randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵

randperm

randperm(n)
产生一个1到n之间自然数的随机排列

randint

randint(m,n,[1 N])
生成m×n的在1到N之间的随机整数矩阵,其效果与randint(m,n,N+1)相同。

连续型分布随机数

如果你安装了统计工具箱(Statistic Toolbox),除了这两种基本分布外,还可以用Matlab内部函数生成符合下面这些分布的随机数

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

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);

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);

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正半轴的左侧,但是它在极端值处也很可能有一些取值。

trnd()

此函数生成服从t(Student’stDistribution,这里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分布会逐渐变胖,当自由度为正无穷时,它就变成标准正态分布了。
接下来的分布相对没有这么常用,同时这些函数的语法和前面函数语法相同,所以写得就简略一些——在视频中也不会讲述,你只需按照前面那几个分布的语法套用即可,应该不会有任何困难——时间足够的话这是一个不错的练习机会。

betarnd()

此函数生成服从Beta分布的随机数。Beta分布有两个参数分别是A和B。下图是A=2,B=5的beta分布的PDF图形。
生成beta分布随机数的语法是:

  • betarnd(A,B,[M,N,P,…])

exprnd()

此函数生成服从指数分布的随机数。指数分布只有一个参数:mu,下图是mu=3时指数分布的PDF图形
生成指数分布随机数的语法是:

  • betarnd(mu,[M,N,P,…])

gamrnd()

生成服从Gamma分布的随机数。Gamma分布有两个参数:A和B。下图是A=2,B=5Gamma分布的PDF图形
生成Gamma分布随机数的语法是:

  • gamrnd(A,B,[M,N,P,…])

lognrnd()

生成服从对数正态分布的随机数。其有两个参数:mu和sigma,服从这个这样的随机数取对数后就服从均值为mu,标准差为sigma的正态分布。下图是mu=-1,sigma=1/1.2的对数正态分布的PDF图形。
生成对数正态分布随机数的语法是:

  • lognrnd(mu,sigma,[M,N,P,…])

raylrnd()

生成服从瑞利(Rayleigh)分布的随机数。其分布有1个参数:B。下图是B=2的瑞利分布的PDF图形。
生成瑞利分布随机数的语法是:

  • raylrnd(B,[M,N,P,…])

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.离散型分布随机数
离散分布的随机数可能的取值是离散的,一般是整数。

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);
可见,每个整数的取值可能性基本相同。

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万轮每轮命中成绩可能的一种情况。

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);

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);

其他函数

  • betarnd 贝塔分布的随机数生成器
  • binornd 二项分布的随机数生成器
  • chi2rnd 卡方分布的随机数生成器
  • exprnd 指数分布的随机数生成器
  • frnd f分布的随机数生成器
  • gamrnd 伽玛分布的随机数生成器
  • geornd 几何分布的随机数生成器
  • hygernd 超几何分布的随机数生成器
  • lognrnd 对数正态分布的随机数生成器
  • nbinrnd 负二项分布的随机数生成器
  • ncfrnd 非中心f分布的随机数生成器
  • nctrnd 非中心t分布的随机数生成器
  • ncx2rnd 非中心卡方分布的随机数生成器
  • normrnd 正态(高斯)分布的随机数生成器
  • poissrnd 泊松分布的随机数生成器
  • raylrnd 瑞利分布的随机数生成器
  • trnd 学生氏t分布的随机数生成器
  • unidrnd 离散均匀分布的随机数生成器
  • unifrnd 连续均匀分布的随机数生成器
  • weibrnd 威布尔分布的随机数生成器
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值