Matlab固定随机数
在仿真中我们经常要引⼊⼀些随机数, 但这些随机数也会导致我们对算法或参数设置的性能的评估有所偏颇。 如果能在两种算法/参数设置的⽐较中, 把随机数加以固定, 使得⽐较时两种情况是在相同的随机情况下进⾏,会更加科学合理。
Matlab中有相关的功能——通过固定随机数种⼦实现。
Matlab中的随机数函数, rand(), randn()等,其实是基于随机数种⼦实现的。 如果我们把随机数种⼦固定了, 那么他们将会产⽣相同的随机数序列。
随机数种⼦的函数是rng(seed), 名字⾮常好记, 其参数seed, 有多种取值:
不加任何参数, 即直接rng()
⽤0作为种⼦, 即rng(0)
rng('default)
以上三种是等价的。 即⽤rng产⽣随机数种⼦,默认是⽤0作为种⼦参数。
另外,任何的正数都可以作为种⼦参数, 如rng(1),就可以⽣成与rng()不同的随机数种⼦
也可以把⽣成的种⼦作为参数输⼊, 如rng(rng(0))。
这⾥我们只需要记住最简单的⽤法, 当seed相同时,产⽣的随机数序列是相同的, 也就可以实现我们要固定随机数的⽬的。
实现随机数的控制
例如, 我们要⽐较3种不同的算法,只需要控制三种算法的随机数种⼦, 那么3种算法运⾏中的所有随机数都会是⼀致的。 talk is cheep, show me the code, 下⾯直接给⼀个⽰例的matlab代码来展⽰下⽤法:
for i = 1:3
rng(0)
s = 0;
for j = 1:100
s = s + rand();
end
s
matlab生成随机数end
外层的for循环可以理解为是三种算法,每种算法⾥, 求100个随机数的和。 最后,打印出来的s是完全⼀样的。 这说明我们每次rand()⽣成的随机数序列在每次循环中都是⼀样的。 为什么呢? **因为我们在每次⽣成随机数的循环开始前, 先使⽤ rng(0)固定了随机数种⼦。 相同的随机数种⼦下, ⽣成的是相同的随机数序列, 也就是说这3个循环的100个rand()的结果是完全⼀样的。
最后, 如何使得每次运⾏matlab程序时的随机数都⼀样呢(⽅便调试)?
很简单, ⽤以下的代码储存随机数即可:
s = rng(0)
save('s', 's')
把⼀次⽣成的随机数种⼦保存下来。 然后把主程序的代码⾥改为:
load('s.mat')
rng(s)
就可以固定随机数了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论