MATLAB 中用于产生随机数的函数很多,基本能满足一般应用情况下的需求。下面简单介绍几种随机数的产生方法。
MATLAB二项分布随机数的产生
在 MATLAB 中,使用 binornd() 函数可以产生二项分布随机数,其调用格式如下:
R=binornd(N,P)
R=binornd(N,P,m,n,...)
R=binornd(N,P,[m,n,...])
其中,N、P 为二项分布参数,返回服从参数为 N、P 的二项分布随机数 R;m 指定随机数的个数,与 R 同维数;m、n 分别表示 R 的行数和列数。
【实例 1】二项分布随机数的产生示例。在编辑器窗口中编写如下代码。
n = 10:10:60;
r1 = binornd(n,1./n)
r2 = binornd(n,1./n,[1 6])
r3 = binornd(n,1./n,1,6)
r4 = binornd([n; n],[1./n; 1./n],2,6)
运行后输出结果如下:
r1 =
3 2 1 2 1 0
r2 =
1 1 2 0 3 1
r3 =
0 2 1 2 1 4
r4 =
1 0 2 2 2 1
2 1 0 1 2 0
MATLAB正态分布随机数的产生
在 MATLAB 中,使用 normrnd() 函数可以产生正态分布随机数,其调用格式如下:
R=normrnd(mu,sigma)
R=normrnd(mu,sigma,m,n,...)
R=normrnd(mu,sigma,[m,n,...])
该函数返回均值为 mu、标准差为 sigma 的正态分布随机数;m 指定随机数的个数,n 表示 R 的列数。
【实例 2】正态分布随机数的产生示例。在编辑器窗口中编写如下代码。
n1 = [normrnd(1;6,1./(1:6)); normrnd(1;6,1./(1:6)); normrnd(1;6,1./(1:6))]
n2 = normrnd(0,1,[1 5])
n3 = normrnd(0,1,[5 5])
n4 = normrnd([1 2 3;4 5 6],0.1,2,3)
运行后输出结果如下:
n1 =
0.5752 0.8646 3.5941 3.8032 5.0750 5.7328
0.5075 2.4798 2.5960 4.1247 4.7638 6.1079
1.4936 1.9382 3.5980 3.5983 5.1072 6.2968
n2 =
0.3108 0.7081 -0.1857 0.8816 -1.7964
n3 =
-1.1317 -0.6197 0.3054 -0.1841 -0.9795
-1.0901 0.4418 1.2039 0.6550 -1.5686
-1.1453 -1.6537 0.6172 2.0343 0.9901
2.3934 -0.7060 -0.0198 -1.1700 -0.4615
1.7305 -0.2923 1.2425 -0.2807 -1.7017
n4 =
0.8976 2.0647 2.8415
4.0986 5.0113 5.9480
MATLAB常见分布随机数的产生
常见分布随机数产生函数(见下表)的使用格式与二项分布随机数和正态分布随机数的产生函数的使用格式相同。
表:常见分布随机数产生函数
函数名
调用格式
注释
rand
X = rand
返回从区间 (0,1) 的均匀分布中得到的随机标量
X = rand(n)
返回一个由均匀分布的随机数组成的 n×n 维矩阵
X = rand(sz1,...,szN)
返回由随机数组成的 sz1×⋯×szN 数组,sz1,⋯,szN 指示每个维度的大小
randn
X = randn
返回一个从标准正态分布中得到的随机标量
X = randn(n)
返回由正态分布的随机数组成的 n×n 维矩阵
X = randn(sz1,...,szN)
返回由随机数组成的 sz1×⋯×szN 数组,sz1,⋯,szN 指示每个维度的大小
unifrnd
r = unifrnd(a,b)
在 [a,b] 的连续均匀分布中生成一个随机数
unidrnd
R = unidrnd(n)
从由最大值 n 指定的离散均匀分布中生成随机数。n 可以是标量、向量、矩阵或多维数组
exprnd
r = exprnd(mu)
从均值为 mu 的指数分布中生成一个随机数
normrnd
r = normrnd(mu,sigma)
从均值为 mu、标准差为 sigma 的正态分布中生成随机数
chi2rnd
r = chi2rnd(nu)
从自由度为 nu 的卡方分布中生成一个随机数
trnd
r = trnd(nu)
从自由度为 nu 的 t 分布中生成一个随机数
fmd
R = fmd(V1,V2)
第一、二自由度分别为 V1、V2 的 F 分布随机数
gamrnd
r = gamrnd(a,b)
从具有形状参数 a 和尺度参数 b 的 gamma 分布中生成一个随机数
betarnd
R = betarnd(A,B)
使用 A 和 B 指定的参数从 beta 分布中生成随机数
lognrnd
r = lognrnd(mu,sigma)
从分布参数 mu(对数值的均值)和 sigma(对数值的标准差)指定的对数正态分布中生成一个随机数
randi
X = randi(imax)
返回一个介于 1 和 imax 之间的伪随机整数
randperm
p = randperm(n)
返回行向量,其中包含从 1 到 n 没有重复元素的整数随机排列
p = randperm(n,k)
返回行向量,其中包含在 1 到 n 之间随机选择的 k 个唯一整数
nbinrnd
RND = nbinrnd(R,P)
从参数为 R、P 的负二项式分布中选择的随机数矩阵
ncfrnd
r = ncfrnd(nul,nu2,delta)
参数为 nul、nu2、delta 的非中心 F 分布随机数
nctrnd
r = nctrnd(V,delta)
参数为 V、delta 的非中心 t 分布随机数
ncx2rnd
r = ncx2rnd(V,delta)
参数为 V、delta 的非中心卡方分布随机数
raylrnd
r = raylrnd(b)
参数为 b 的瑞利分布随机数
wblrnd
r = wblrnd(a,b)
参数为 a、b 的威布尔分布随机数
binornd
r = binornd(n,p)
参数为 n、p 的二项分布随机数
geornd
r = geornd(p)
参数为 p 的几何分布随机数
hygernd
r = hygernd(M,K,N)
参数为 M、K、N 的超几何分布随机数
poissrnd
r = poissrnd(lambda)
参数为 lambda 的泊松分布随机数
表中大部分函数给出的调用格式是返回一个随机数,如果想返回矩阵可额外增加参数 sz1,…,szN 或向量 sz,用以指定 size(r),即确定每个维度的大小为 sz1×…×szN。
MATLAB控制随机数生成器
在 MATLAB 中,利用 rng() 函数可以控制随机数的生成,其调用格式如下:
rng("default"):使用默认算法和种子初始化 MATLAB 随机数生成器。出厂默认设置是种子为 0 的梅森旋转生成器。
rng:函数控制全局流,决定 rand、randi、randn 和 randperm 函数如何产生一系列随机数。
rng(seed):使用当前生成器算法指定随机数生成器的种子。seed 指定为非负整数,如 rng(1),则使用该种子初始化随机数生成器;指定为 "shuffle",则根据当前时间初始化生成器种子。
rng(seed, generator):额外指定随机数生成器要使用的算法。例如,rng(2, "philox") 使用种子 2 初始化 Philox 4×32 生成器。
例如:
% 设置随机数生成器的种子为 10
rng(10);
% 生成 5 个随机数
randomNumbers = rand(5, 1);
% 显示生成的随机数
disp('生成的随机数为:');
disp(randomNumbers);
% 再次设置随机数生成器的种子为 10
rng(10);
% 再次生成 5 个随机数
newRandomNumbers = rand(5, 1);
% 显示再次生成的随机数
disp('再次生成的随机数为:');
disp(newRandomNumbers);
% 检查两次生成的随机数是否相同
if isequal(randomNumbers, newRandomNumbers)
disp('两次生成的随机数相同。');
else
disp('两次生成的随机数不同。');
end
运行后输出结果如下:
生成的随机数为:
0.8147 0.9134 0.0262 0.8600 0.5688
再次生成的随机数为:
0.8147 0.9134 0.0262 0.8600 0.5688
两次生成的随机数相同。