MATLAB中有两个基本的(伪)随机数发生函数, rand与randn.
1. rand()产生0和1之间均匀分布的随机数
1.1 直接输入rand产生一个0和1之间的随机数,
>> rand
ans =
0.7553
>> rand
ans =
0.4009
1.2 rand(m)产生一个m*m的矩阵,当然矩阵的值是0和1之间均匀分布的随机数,
>> rand(4)
ans =
0.2602 0.0760 0.6869 0.5179
0.5191 0.1917 0.5028 0.7428
0.4997 0.1574 0.5523 0.3980
0.9365 0.3902 0.2324 0.2861
1.3 rand(m,n)或者rand([m,n])产生一个m*n的矩阵,
>> rand(2,4)
ans =
0.4023 0.4784 0.4143 0.9494
0.4660 0.7545 0.8291 0.8965
1.4 rand(size(A))返回一个和A相同大小的随机数矩阵,
>> D=ones(3,4)
D =
1 1 1 1
1 1 1 1
1 1 1 1
>> rand(size(D))
ans =
0.5344 0.8003 0.0270 0.7813
0.9378 0.3654 0.8377 0.7265
0.9613 0.1164 0.8151 0.5799
1.5实例,
产生2和5之间的一组随机数序列,
>> A=2;
>> B=5;
>> A + (B-A).*rand(1,6)
ans =
4.8285 3.9580 4.8779 3.0478 4.2555 2.0482
2. randn()产生均值为0, 方差为1的正态分布的随机数。用法和rand类似。
>> randn
ans =
-0.3697
>> randn(3)
ans =
0.5089 0.5860 -0.5517
0.7978 -0.6301 2.4338
2.3280 -0.3184 0.4719
>> randn(1,6)
ans =
-0.7443 -1.4583 0.2043 -0.9238 -0.8349 0.1101
3. 初始化问题
每次启动MATLAB时rand与randn的初始状态都会被自动重置, 从而会产生完全相同的伪随机序列。为了得到不同的伪随机序列, 可以自行重置随机数发生函数的状态,相应的语句是rand(method, s)和randn(method, s)。
3.1 参数method是一个字符串, 用来指明随机数发生器使用那种算法。
rand的method有三种取值: 'twister', 'state', 'seed', 其中最新的'twister'方法产生的伪随机序列重复周期最长,也是MATLAB 7.4及更高版本的默认方法。
randn中只包括后两种method, 默认方法是'state'。
3.2 参数s设置所选定方法的状态。
可以用rand(method)和randn(method)查看method方法当前的状态(这一命令并不改变随机数发生函数当前使用的算法)。
'seed'方法的状态是一个数, 而'state'与'twister'方法的状态是一个数组.
参数s应该是一个自然数, 它将随机数发生器所选定的方法的状态设置为‘第s个’可能的状态。
有时我们希望每次运行得到的伪随机序列都不一样, 这样看起来更像随机的。rand的帮助文档中给了一个示例方案:rand('twister',sum(100*clock))这一思路是将状态值设置为时变的. clock函数返回反映当前时间的1x6数组[年,月, 日, 时, 分, 秒](注意sum(100*clock)一般不是整数。这个例子似乎不太合乎规范, 但运行起来没问题).。