首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB中奇怪的rand()行为

MATLAB中奇怪的rand()行为
EN

Stack Overflow用户
提问于 2015-02-14 00:23:50
回答 2查看 767关注 0票数 1

rand()似乎不会产生真正的随机数。我有一个简单的程序,通过调用来返回一个6位数的数字:

代码语言:javascript
复制
for i=1:6
 r=rand(1,1)
end 

所以我昨天跑了4-5次。并保存了输出。今天,我再次打开MATLAB,并再次调用相同的函数4-5次.同样的号码也被归还了。

为什么会发生这种情况?

我应该提供一个随机种子或任何其他解决办法吗?

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-14 00:28:27

Mathworks文档中,可以使用

代码语言:javascript
复制
rng('shuffle');

在调用rand设置“随机”种子之前(基于当前时间)。手动设置种子(通过在启动时不更改种子、使用rng('default')重置种子或通过rng(number)手动设置种子)允许您准确地重复以前的行为。

票数 4
EN

Stack Overflow用户

发布于 2015-02-14 00:29:58

为了扩展@alexforrence的答案,rand和其他相关函数产生了伪随机数(PRNs),需要一个初始值才能开始生成。这些数字并不是真正随机的,因为在初始种子之后,这些数字是通过一种算法产生的,该算法根据其本质是确定性的。

然而,伪随机并不一定是坏事,因为使用PRN的模型(例如Monte方法)可以在许多用户和平台上产生可移植的、可重复的结果。此外,可以更改种子以创建一组随机数和结果,这些随机数和结果在统计上是独立的,但也会产生可重复的结果。对于许多科学应用来说,这是非常重要的。另外,“真”随机数(下一段)往往“聚在一起”,在空间的小样本范围内分布不均匀,这将降低一些依赖随机过程的方法的性能。

有一些方法可以通过引入各种模拟源(例如硬件噪声)的随机性来创建“真-呃”随机数。这些类型的数字对于密码安全PRN来说是非常重要的,在这里,不可重复是一个重要的特性(与科学使用不同)。真正的随机数发生器需要利用自然噪声(例如量子效应)的特殊硬件。尽管如此,重要的是要记住,可以生成和计算使用的随机数的总数受到所使用数字的精度的限制。

您可以使用rng函数用伪随机种子重新播种MATLAB .但是,“在会话中频繁地重新播种生成器并不是一个好主意,因为随机数的统计属性可能会受到不利影响”[src]

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28510971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档