【问题标题】:Generate 100 random numbers between 0 and 1 and freeze it [closed]生成 0 到 1 之间的 100 个随机数并将其冻结 [关闭]
【发布时间】:2015-12-25 00:43:51
【问题描述】:

如何生成 0 到 1 之间的 100 个随机数并冻结使其无法更改?我想使用 MATLAB。我使用 Excel 生成,但它不断变化,所以我厌倦了这些不断变化。我有 10 个变量,并且必须为每个变量生成 0 到 1 之间的 100 个随机数。我还需要将这些生成的数字导出到 Excel。非常感谢您的帮助。

【问题讨论】:

  • 好吧,我想说的是在 0 和 1 之间生成 100 个数字,所以 1,2,3,....100 并且每个数字的值都在 0 之间和 1?.. 谢谢
  • 我不明白您所说的“冻结”是什么意思。除非您编写变量,否则变量不会改变,或者您要求可重现的随机数?如果是这样,请阅读文档中的“种子”。

标签: matlab random generator


【解决方案1】:

第 1 部分:生成可重复的随机数

我认为冻结是指在程序的不同运行中,随机数生成器会生成相同的“随机”数序列。

这已在 MATLAB 中使用命令 rng 处理。

此函数采用的唯一参数是种子的值。在您的情况下,您可以使用 default 值,以便每次运行代码时算法参数都设置为默认值。因此,它会一遍又一遍地生成相同的数字序列。

rng('default') 将 rand、randi 和 randn 使用的随机数生成器的设置设置为其默认值。这样,生成的随机数与您重新启动 MATLAB 时一样。默认设置是种子为 0 的 Mersenne Twister。

例子:

>> rng('default');
>> A = rand(1,10)

A =

    0.8147    0.9058    0.1270    0.9134    0.6324    0.0975    0.2785    0.5469    0.9575    0.9649

>> B = rand(1,10)

B =

    0.1576    0.9706    0.9572    0.4854    0.8003    0.1419    0.4218    0.9157    0.7922    0.9595

>> rng('default');
>> B = rand(1,10)

B =

    0.8147    0.9058    0.1270    0.9134    0.6324    0.0975    0.2785    0.5469    0.9575    0.9649

因此,在示例中,首先使用default 参数生成A 变量。另一方面,第二个参数B是在不重置随机生成器参数的情况下生成的,因此它与A不同。通过将参数重置为默认值,您可以获得与第一个变量相同的结果。

rand 命令为您提供均匀分布在 [0,1] 上的数字,使用 rbg('default') 您将一次又一次地获得相同的序列。

因此,根据 MA​​TLAB,您生成可重复的随机数


第 2 部分:用 Excel 编写

很简单,你只需要使用matlab函数xlswrite。在此处查看文档。还有一个例子:

xlswrite('myExcel.xlsx',A);

【讨论】:

    【解决方案2】:

    软件生成的随机数并不是真正随机的,它们是伪随机的。在不深入研究技术细节的情况下,伪随机数序列是从种子值生成的,大多数语言/操作系统会将初始种子设置为随着运行而变化的东西,通常与系统的内部时钟有关,或上一次运行的随机数生成器。因此,如果您两次运行相同的程序,大多数系统中的默认行为会给您带来不同的结果。

    出于调试目的,这通常是不可取的,因此大多数系统通常会为您提供一种明确设置种子的方法。在 Matlab 中,您可以使用 rng(seed) 将种子设置回默认值,或者在需要时将其设置为特定数字,例如,十个不同的可重复随机数运行以说服自己您的算法是正确的。 (即,rng(1) 然后运行您的软件;rng(2) 并运行您的软件以获得具有不同随机数的不同结果;rng(1) 准确地重复第一次运行,等等)

    Excel 在两个方面略有不同。首先,每次有更新时,Excel 都会假定您要更新整个电子表格中的所有内容,包括对随机数生成器的所有调用,这会导致您看到的刷新。其次,据我所知,没有办法设置或重置种子。 Excel 中通常的 hack 是可怕的——生成随机数,然后将结果作为特殊值(仅复制数字,而不是公式)复制到您需要的地方。

    使用这些技术中的任何一种都要非常小心。它们对于调试是完全合法的,但是如果您将它们合并到程序中而忘记删除它们,您以后会非常不高兴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2011-01-23
      • 2016-09-25
      • 2011-07-07
      • 1970-01-01
      相关资源
      最近更新 更多