Matlab 生成100个介于0和1之间的随机数并将其冻结
如何生成100个介于0和1之间的随机数并冻结,使其无法更改?我想用MATLAB。我使用Excel生成,但它不断变化,所以我受够了这些不断的变化。我有10个变量,必须为每个变量生成100个介于0和1之间的随机数。我还需要将这些生成的数字导出到Excel。非常感谢您的帮助。第1部分:生成可重复的随机数 我认为冻结是指在程序的不同运行中,随机数生成器生成相同的“随机”数序列 这已在MATLAB中使用命令Matlab 生成100个介于0和1之间的随机数并将其冻结,matlab,random,generator,Matlab,Random,Generator,如何生成100个介于0和1之间的随机数并冻结,使其无法更改?我想用MATLAB。我使用Excel生成,但它不断变化,所以我受够了这些不断的变化。我有10个变量,必须为每个变量生成100个介于0和1之间的随机数。我还需要将这些生成的数字导出到Excel。非常感谢您的帮助。第1部分:生成可重复的随机数 我认为冻结是指在程序的不同运行中,随机数生成器生成相同的“随机”数序列 这已在MATLAB中使用命令rng解决 此函数采用的唯一参数是种子的值。在您的情况下,可以使用defaultvalue,这样每次
rng
解决
此函数采用的唯一参数是种子的值。在您的情况下,可以使用default
value,这样每次运行代码时算法参数都会设置为默认值。因此,它一次又一次地生成相同的数字序列
rng(“默认”)将rand、randi和randn使用的随机数生成器的设置设置为其默认值。这样,就产生了与重新启动MATLAB相同的随机数。默认设置为种子为0的Mersenne扭曲器
例如:
>> 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
因此,在本例中,首先使用默认
参数生成变量。另一方面,第二个参数B
,是在不重置随机生成器的参数的情况下生成的,因此它与A
不同。通过将参数重置为默认值,可以获得与第一个变量相同的结果
rand
命令为您提供均匀分布在[0,1]上的数字,使用rbg('default')
您将一次又一次地获得相同的序列
因此,根据MATLAB,您可以生成可重复的随机数
第2部分:用Excel编写
这很简单,只需使用matlab函数xlswrite
。请检查此处的文档。有一个例子:
xlswrite('myExcel.xlsx',A);
软件生成的随机数不是真正的随机数,而是伪随机数。在不深入研究技术细节的情况下,伪随机数序列是从种子值生成的,大多数语言/操作系统会将初始种子设置为在不同运行时发生变化的内容,通常与系统的内部时钟或随机数生成器的上一次运行有关。因此,如果您两次运行同一个程序,大多数系统中的默认行为将给出不同的结果
出于调试目的,这通常是不可取的,因此大多数系统通常提供一种显式设置种子的方法。在Matlab中,您可以使用rng(seed)将seed设置回默认值,或者如果需要(比如)十次不同的可重复运行的随机数来证明您的算法是正确的,则可以将其设置为特定的数字。(例如,rng(1)然后运行您的软件;rng(2)使用不同的随机数运行您的软件以获得不同的结果;rng(1)精确地重复第一次运行,等等)
Excel在两个方面有点不同。首先,每次有更新时,Excel都假定您要更新整个电子表格中的所有内容,包括对随机数生成器的所有调用,这会导致您看到的刷新。第二,据我所知,没有办法设置或重置种子。Excel中常见的黑客行为是可怕的——生成随机数,然后将结果作为特殊值复制到需要的地方(只复制数字,不复制公式)
使用这两种技术中的任何一种都要非常小心。它们对于调试来说是完全合法的,但是如果您将它们合并到一个程序中并忘记删除它们,那么以后您将非常不高兴 我想说的是,生成100个介于0和1之间的数字,所以1,2,3,…100,每个数字的值都在0和1之间?。。谢谢,我不明白你说的“冻结”是什么意思。除非你写了一个变量,否则它不会改变,或者你要求的是可复制的随机数?如果是,请阅读文档中的“种子”。