主要内容

控制随机数生成

这个例子展示了如何使用rng功能,它提供了控制随机数生成。

(伪)随机数在MATLAB®来自兰德,兰迪,randn功能。许多其他函数调用这三个,但是这些都是基本的构建块。所有三个取决于一个共享随机数生成器,您可以控制使用rng

重要的是要认识到“随机”MATLAB数字不是不可预测的,但是是由确定性算法生成的。算法设计得足够复杂,它的输出出现人是一个独立的随机序列不知道算法,并且可以通过各种统计测试的随机性。这里介绍的功能是提供方法来利用决定论

  • 包括随机数重复计算,得到相同的结果,或

  • 保证不同随机数用于重复计算

并利用随机性相结合来证明结果单独计算。

“重新开始”

如果你看的输出兰德,兰迪,或randnMATLAB在一个新的会话,你会注意到他们返回相同的序列的数字每次重启MATLAB。通常是有用的能够重置随机数生成器启动状态,实际上没有重启MATLAB。例如,您可能想要重复计算,包括随机数,并获得相同的结果。

rng提供了一个非常简单的方法将随机数字生成器回到其默认设置。

rng默认的兰德%在启动时返回相同的值
ans = 0.8147

什么是“默认”随机数设置MATLAB启动,或者rng违约给你吗?如果你叫rng没有输入,您可以看到它是梅森素数的旋风发生器算法,播种与0。

rng
ans =结构体字段:类型:“龙卷风”种子:0状态:x1 uint32 [625]

你会看到下面的详细如何使用上面的输出,包括状态领域,控制和改变MATLAB生成随机数。现在,它是一种了解发电机兰德,兰迪,randn目前使用。

Non-Repeatability

每一次你叫兰德,兰迪,或randn,他们画一个新的价值共享的随机数发生器,并可视为统计独立的连续值。但是正如上面提到的,每次重启MATLAB函数重置和返回相同的数字序列。很明显,计算使用相同“随机”数字不能被认为是统计独立的。所以当有必要结合计算在两个或两个以上的MATLAB完成会话就好像他们统计独立的,你不能使用默认生成器设置。

一个简单的方法来避免重复相同的随机数在新的MATLAB会话是选择一个不同的随机数生成器的种子。rng给你一个简单的方法,通过创建一个基于当前时间的种子。

rng洗牌兰德
ans = 0.1909

每次使用“洗牌”,它重新播种发电机用不同的种子。你可以叫rng没有输入,看看种子实际使用。

rng
ans =结构体字段:类型:“龙卷风”种子:44207240状态:x1 uint32 [625]
rng洗牌%每次都创建一个不同的种子rng
ans =结构体字段:类型:“龙卷风”种子:44207246状态:x1 uint32 [625]
兰德
ans = 0.9660

“洗牌”是一个非常简单的方法来补播随机数发生器。你可能会认为这是一个好主意,或者甚至是必要的,用它来获得“真正”的MATLAB的随机性。不过,在大多数情况下,没有必要使用“洗牌”在所有。选择种子根据当前时间并不能提高你会得到的值的统计特性兰德,兰迪,randn,不让他们在任何真正意义上“随机”。虽然是完全可以补播发电机每次你启动MATLAB,或在你运行一些大型计算包括随机数,它实际上不是一个好主意补种发电机过于频繁地在一个会话,因为这可以影响你的随机数的统计特性。

什么“洗牌”都提供一种方法来避免重复相同的序列值。有时候这是至关重要的,有时它只是“好”,但通常这并不重要。记住,如果你使用“洗牌”,你可能需要保存的种子rng创建,这样你以后可以重复你的计算。下面你将看到如何这样做。

更多的控制重复性和Non-Repeatability

到目前为止,您已经看到了如何重置其默认设置的随机数发生器,并重新播种使用种子创建使用当前时间。rng还提供了一个重新播种方法使用特定的种子。

你可以多次使用相同的种子,重复相同的计算。例如,如果您运行此代码两次……

rng (1)%的种子是任何非负整数< 2 ^ 32x = randn (1、5)
x =1×5-0.6490 1.1812 -0.7585 -1.1096 -0.8456
rng (1) x = randn (1、5)
x =1×5-0.6490 1.1812 -0.7585 -1.1096 -0.8456

…你得到完全相同的结果。你可能会重现x后清除它,这样你就可以在后续的计算依赖于重复发生x使用这些特定的值。

另一方面,您可能想要选择不同的种子,以确保你不重复相同的计算。例如,如果您运行此代码在一个MATLAB会话……

rng (2) x2 =总和(randn (1000), 1);% 1000次试验的随机游走

和这段代码在另一个……

提高(3)x3 =总和(randn (1000), 1);

…你可以将两个结果和有信心,他们不仅仅是相同的结果重复两次。

x = (x2 x3);

“洗牌”有一个警告当重播MATLAB的随机数发生器,因为它影响到所有随后的输出兰德,兰迪,randn。除非你需要重复性或独特性,它通常是可取的,只是没有重播生成器生成随机值。如果你需要补播发电机,通常最好在命令行中完成,或在您的代码中不容易被忽视。

选择一个发电机类型

不仅可以补播随机数生成器如上所示,您也可以选择您想要使用的随机数生成器类型。不同的发电机类型产生不同的随机数序列,你可以,例如,选择一个特定类型的统计特性。或者你可能需要重建的结果从一个旧版本的MATLAB,使用一个不同的默认生成器类型。

选择发电机类型的另一个常见的原因是你编写验证测试产生“随机”输入数据,你需要保证你的测试总是可以指望完全相同的可预测的结果。如果你叫rng种子在创建输入数据之前,补播随机数发生器。但如果发电机类型已经改变了由于某种原因,然后的输出兰德,兰迪,randn不会你期望的种子。因此,100%的可重复性,您还可以指定一个发电机类型。

例如,

rng (0,“旋风”)

原因兰德,兰迪,randn播种后用梅森素数的旋风发生器算法,用0。

使用“combRecursive”

rng (0,“combRecursive”)

选择多个发电机递归算法相结合,支持一些特性,梅森素数捻线机不平行。金宝app

这个命令

rng (0,v4的)

选择默认的发生器算法在MATLAB 4.0。

当然,这个命令返回其默认设置的随机数发生器。

rng默认的

然而,因为默认的随机数字生成器设置MATLAB版本之间可能会发生变化,使用“默认”并不能保证长期可预测的结果。“默认”重置随机数发生器是一种方便的方法,但是对于更多的可预测性,指定一个发电机类型和一个种子。

另一方面,当你交互,需要重复性工作,它是简单的,通常是足够的,电话rng只有一粒种子。

保存和恢复随机数发生器设置

调用rng没有输入返回标量结构字段包含两部分信息已经描述:发电机类型和发电机的整数是去年受移植者。

s = rng
s =结构体字段:类型:“龙卷风”种子:0状态:x1 uint32 [625]

第三个字段,状态发电机,包含一个复制的当前状态向量。这种状态向量是发电机内部维护的信息以生成的随机数序列中的下一个值。每一次你叫兰德,兰迪,或randn发电机,他们分享更新其内部状态。因此,在设置返回的结构状态向量rng包含必要的信息重复序列,开始从被捕的状态。

只有能够看到这个输出信息,rng作为一个还接受一个设置结构输入,这样你就可以保存设置,包括状态向量和恢复以后重复计算。因为设置包含发电机类型,你就会知道你要什么,所以“后来”可能意味着从片刻之后在同一MATLAB会话,多年以后(和多个MATLAB版本)。你可以从任何点重复结果你救了的随机数序列生成器设置。例如

x1 = randn (10,10);%前进的随机数序列s =提高;%保存设置x2 = randn (1、5)
x2 =1×50.8404 -0.8880 0.1001 -0.5445 0.3035
x3 = randn (5,5);%前进的随机数序列rng(年代);%将发电机返回保存的状态x2 = randn (1、5)%重复相同的数字
x2 =1×50.8404 -0.8880 0.1001 -0.5445 0.3035

注意到,尽管再播只提供了一个粗仅,保存和恢复使用的发电机状态设置允许您重复结构任何随机数序列的一部分。

最常见的使用设置结构的方法是恢复发电机状态。然而,因为不仅结构包含状态,而且发电机类型和种子,它也是一个方便的方式暂时切换发电机类型。例如,如果您需要创建值使用遗留的发电机从MATLAB 5.0,您可以保存当前设置在同一时间,您切换到使用旧发电机……

previousSettings = rng (0,“v5uniform”)
previousSettings =结构体字段:类型:“龙卷风”种子:0状态:x1 uint32 [625]

…以后,然后恢复原来的设置。

rng (previousSettings)

你不应该修改的内容的任何字段设置结构。特别是,你不应该构建自己的状态向量,甚至依赖的格式发电机状态。

编写更简单、更灵活,代码

rng允许你要么

  • 补播随机数发生器,或

  • 保存和恢复随机数发生器设置

不知道它是什么类型。你也可以返回随机数发生器其默认设置,而无需知道这些设置是什么。而有些情况下,您可能想要指定一个发电机类型,rng提供你的简单性来指定它。

如果你能避免指定一台发电机类型,您的代码就会自动适应情况不同需要使用发电机,并自动将受益于改进属性在一个新的默认随机数字生成器类型。

rngRandStream

rng提供了一种方便的方法来控制随机数生成在MATLAB最常见的需求。然而,更复杂的情况下涉及多个随机数流和并行随机数生成需要一个更复杂的工具。的RandStream工具类,它提供了最有力的方法来控制生成随机数。这两个工具是互补的,rng提供一个更简单和简洁的语法,是建立在的灵活性RandStream