罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已退役,不会更新。

MATLAB中随机数生成的简单控制

我们将再次听取客座博主彼得·珀金斯的意见,他是The MathWorks的一名统计软件开发人员。

MATLAB从一开始就有随机数。但毫不奇怪,随着艺术的发展,原始的
MATLAB中的工具并不真正适合合并像并行随机数生成这样的新思想。所以R2008b看到
增加RandStream类,它被设计来支持这些新想法,包括新的生成器算法,多个随机金宝app数流,
子流,并行生成。

RandStream还固定了一个旧的问题大多数人甚至不知道它的存在,在那里MATLAB代码重新播种或读取/写入MATLAB随机数的状态
生成器使用r2008b之前的“控件”语法,例如

兰特(“种子”, 0);可能不会做你想的那样!

并不总是如你所愿。

那么介绍一下RandStream这是一件好事,提供了使用随机数的强大新方法。问题是,有了权力就有了代价:使用RandStream导致更冗长和更难理解的MATLAB代码,至少需要一些MATLAB对象的知识,而且只是
平原感觉不同而不是用旧的方式做事。

流= RandStream(“mt19937ar”“种子”, 5489);MATLAB的启动设置RandStream.setGlobalStream(流);

许多人或多或少地反馈给我们:“嘿!我只想生成随机数!它不应该
就像学习脑外科手术一样!”我们听了,在R2011a中,增加了一个新功能,rng,它允许您简单、快速、直观地控制MATLAB如何生成随机数。rng是建在上面的吗RandStream所以从这个意义上说,这并不是什么新鲜事。但是它为最常见的操作提供了一个更简单的接口。

例如,要将MATLAB的随机数生成器重新初始化为默认设置,可以使用此命令

rng默认的

然后用种子重新初始化它54321你用这个

rng (54321);

您还可以“不可预测地”使用

rng洗牌

绝对是一个更简单的语法,但仍然有一些潜在的棘手的想法,可能会绊倒你的想法。
几年前,我写道两篇文章描述了随机数发生器种子和状态背后的基本思想,并展示了如何在发生器中“控制”
MATLAB,更重要的是,讨论何时和什么时候不出现。所有这些仍然是相关的和重要的理解。但这些帖子是用RandStream

这一次,我只指出MATLAB用户指南部分这两份报告的内容基本相同,但这一次是关于rng函数。这是一本快速阅读的书,我真的推荐给任何想要了解如何在MATLAB中使用随机数的人。
简单的总结就是,你根本不需要做任何特别的事情不仅仅是打电话兰德兰迪,或randn创建随机数组。但如果你需要简单的重复性或独立性,rng很容易就能得到你。

rng也就是更直接的替代比RandStream对于旧的,r2008b之前的重新播种或读写生成器状态的方法。如果你有使用这些旧命令的代码,
你可能已经注意到MATLAB编辑器中的代码分析器标记了它们。在R2011a中,警告指示您到a文档的一部分它展示了如何用新的取代旧的。

RandStream仍然是工具用于涉及多个并行随机流的更复杂的情况,所以rng并不能完全取代它。但对大多数人来说,大多数时候,rng是一个简单得多的选择。

使用MATLAB®7.12发布

|