• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[转]Delphi窗体的事件发布时间:2022-07-18
下一篇:
问题-[Delphi]用LoadLibrary加载DLL时返回0的错误发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap