引言
上文简要介绍了蒙特卡罗法,以及一些简单的应用案例和相关讨论。
本文将以matlab为例,介绍其随机数是如何生成的。
随机数
应用蒙特卡罗法的过程中,如何产生需要的随机数是关键的一个环节。
Matlab有很多生成随机数的方法,比较常用的是random这个函数。
Y = random(name,A,B,C,[m,n,...]):
Y是生成的随机序列或随机矩阵;
name,随机分布的形式;
A,B,C,对应随机分布的参数;
[m,n,...]矩阵的规模。
例如,Y = random('unif',0,1,[100000,1]),生成了0-1的均匀分布。
Y = random('exp',1,[100000,1]),生成了均值为1的指数分布。
Y = random('norm',0,1,[N,1]),生成了0~1的高斯分布。
随机种子
由于我们生成的实际上是伪随机数,随机数值是可以重现的,这里就要介绍如何应用随机种子。
如果我们使用Y = random('norm',0,1,[1,5]),连续使用几次,生成的结果每次都是不同的,如:
这里,系统默认给了一个随机种子,因此每次结果是不同的。
如果我们希望随机化的过程可以重现,我们需要知道当前的随机种子编号,则应用rng这个函数可以实现。
运行以下代码,每次生成的Y都是一致的,因为我们指定了随机种子数:
a = rng(123456);
Y = random('norm',0,1,[1,5]);
随机种子有很多生成方式,系统默认的就有多种方法,如:
a = rng('shuffle', 'twister')
运行显示:
a =
Type: 'twister'
Seed: 1771971539
State: [625x1 uint32]
我们把Seed给记下来,如果想重现,只要用这个随机种子,在rng里重置以下就行了。
常见的方式还有我们自己利用时钟生成随机种子,比如:
t = clock;
s = floor(t(1)+2*t(2)+3*t(3)+4*t(4)+5*t(5)+1000*t(6));
rng(s)
Y = random('norm',0,1,[1,5]);
随机过程
还有一类随机数不仅仅与分布有关,还与序列的排列顺序有关,称之为随机过程。
如高斯白噪声,可以通过wgn这个函数实现:
N = 100000;
x = wgn(1,N,0); %生成N*1个高斯白噪声,功率为0dBW
序列的曲线,及其PSD,还有自相关函数如图。
并且其分布也是满足高斯分布的。
最后
应用蒙特卡罗法的过程中,如何产生需要的随机数是关键的一个环节,本文简要介绍了在Matlab中的常用实现方法,蒙特卡罗法这个专题也暂时告一段落。
联系客服