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.537667139546100 0.862173320368121 -0.433592022305684
1.833885014595087 0.318765239858981 0.342624466538650
-2.258846861003648 -1.307688296305273 3.578396939725761
>> randn(3)
ans =
2.769437029884877 0.725404224946106 -0.204966058299775
-1.349886940156521 -0.063054873189656 -0.124144348216312
3.034923466331855 0.714742903826096 1.489697607785465
>> randn(3)
ans =
1.409034489800479 -1.207486922685038 0.488893770311789
1.417192413429614 0.717238651328838 1.034693009917860
0.671497133608081 1.630235289164729 0.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是自己可以指定均数和标准差的正态分布。