Matlab(1): 随机函数rand使用的技巧

由于我的算法中的参数初始值是在一定范围内随机给的,老板说要多跑几次计算结果的均值和方差以减小随机性带来的影响,我跑了十遍发现结果怎么都一样,原来是rand出了问题。

 

1. MATLAB中的rand产生的是0到1(不包括1)的随机数,rand函数生成的是伪随机数,是由种子递推出来的,相同的种子,生成相同的随机数。

2. MATLAB刚运行起来的时候,种子都为初始值,所以每次重启MATLAB的时候,Rand的状态都被重置(相当于把序列的指针移到了随机数序列的开始),因此每次第一次执行rand得到的随机数都是相同的。

实验:打开MATLAB,用rand(1)跑一下。关掉MATLAB再打开一次,再用rand(1)跑一下。结果确实是一样的。

 

一般来说有两种需求:

(1)多次运行,生成相同随机数

       演示需求,比如示例程序,希望每一个跑这段程序的人都能和示例得到一样的结果,那么就需要大家的rand产生的值是一样的。

       方法:

       用rand('state',s)设定种子,s为35阶向量,最简单的设为0就好。

       例:rand('state',0); rand(1);

(2)多次运行,生成不同随机数

       比如像我这样子跑实验,希望尽可能是产生的随机数,不希望每次重启MATLAB都是一样的。

       方法:

       用rand('state',sum(100*clock))产生和时间相关的种子,种子与计算机当前的时钟时间有关,如果计算机的时间相同,生成的随机数还是会相同。

       在你计算机速度足够快的情况下,试运行一下:

       rand('state',sum(100*clock));A=rand(5,5);rand('state',sum(100*clock));B=rand(5,5);

       A和B是相同.

       所以还可以再增加一个随机变量,变成:

       rand('state',sum(100*clock)*rand(1));

 

 

转载于:https://www.cnblogs.com/yyuanad/p/4301005.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值