码迷,mamicode.com
首页 > 其他好文 > 详细

Matlab随机函数rand使用的技巧

时间:2015-02-26 13:14:43      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

由于我的算法中的参数初始值是在一定范围内随机给的,老板说要多跑几次计算结果的均值和方差以减小随机性带来的影响,我跑了十遍发现结果怎么都一样,原来是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));

 

 

Matlab随机函数rand使用的技巧

标签:

原文地址:http://www.cnblogs.com/yyuanad/p/4301005.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!