随机数的产生指令:rand 或 rand()
生成一个在0~1内均匀分布的随机数

matlab gpu 随机数 matlab随机数命令_算法


rand的运行结果如下:

matlab gpu 随机数 matlab随机数命令_线性代数_02


关于生成的随机数有如下一些基础的指令:

rng()           %重置随机数的指令,随机数种子,也叫固定随机数生成器
rand()           %生成(0,1)之间的随机数
2*rand()         %生成(0,2)之间的随机数
n*rand()         %生成(0,n)之间的随机数
randn            %生成正态分布的随机数,平均数为0,方差为1
rand(n)          %生成一个n维随机数方阵
rand(a,b)        %生成一个a行b列的随机数矩阵
randi([min,max]) %i即为integer整数.生成(min,max)之间的随机整数
randi([min,max],a,b) %i即为integer整数。生成(min,max)之间的a行b列的随机整数矩阵

计算机生成随机数的原理

计算机产生的随机数是伪随机数。这里就不得不谈一下计算机生成随机数的原理。

首先需要知道重置随机数的指令:rng()

我们使用rng(1)指令重置随机数后,会发现再运行rand指令后所出的随机数都是一样的:0.417,0。7203…如下:

matlab gpu 随机数 matlab随机数命令_算法_03


matlab gpu 随机数 matlab随机数命令_矩阵_04

在上例中,计算机生成的三个随机数分别是0.4170, 0.7203,和 1.1437e-04.其生成随机数的原理是,将上一个生成的随机数作为下一个生成的随机数的输入。
比如f(1)=0.4170,
f(2)为将0.4170作为输入,带入到matlab内部算法中生成的数是 0.7203,
f(3)为将0.7203作为输入,生成的数是1.1437e-04

如此往复生成的这一列随机数成为:global list或global stream。
换句话说当你确定了第一个随机数后,其实后面的随机数也都被确定了。因而第一个随机数尤其重要,称为随机种子(random seed).一旦种子确定了,后面的随机数也都被确定了。

rng() %重置matlab的随机数生成器,重置后的起始值还是一开始的初始值,即随机因子又回来了,随机数便不会产生变化. ()里的值是非负整数,如果是小数的话自动舍去小数部分)

这就是为什么,有时候做随机实验时,每次重新启动matlab后,所做的随机实验的结果都是一样的。因为重新启动matlab后,随机因子都会被重启,随机试验的结果就都一致了。

那么MATLAB中,设定一个不会变化且不会重复的随机因子的指令为:rng(‘shuffle’)

matlab gpu 随机数 matlab随机数命令_矩阵_05


shuffle的中文意思为:洗牌。其实是即根据计算机的时间,来设置为随机因子。时间差毫秒之差都能被记录,这就杜绝了新的随机试验与之前的随机实验使用相同数列的可能性。

产生非0~1范围内的随机数

例:

matlab gpu 随机数 matlab随机数命令_算法_06