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是自己可以指定均数和标准差的正态分布。
另外,Matlab随机数生成函数主要包括:
betarnd 贝塔分布的随机数生成器
binornd 二项分布的随机数生成器
chi2rnd 卡方分布的随机数生成器
exprnd 指数分布的随机数生成器
frnd f分布的随机数生成器
gamrnd 伽玛分布的随机数生成器
geornd 几何分布的随机数生成器
hygernd 超几何分布的随机数生成器
lognrnd 对数正态分布的随机数生成器
nbinrnd 负二项分布的随机数生成器
ncfrnd 非中心f分布的随机数生成器
nctrnd 非中心t分布的随机数生成器
ncx2rnd 非中心卡方分布的随机数生成器
normrnd 正态(高斯)分布的随机数生成器
poissrnd 泊松分布的随机数生成器
raylrnd 瑞利分布的随机数生成器
trnd 学生氏t分布的随机数生成器
unidrnd 离散均匀分布的随机数生成器
unifrnd 连续均匀分布的随机数生成器
weibrnd 威布尔分布的随机数生成器