MATLAB 数学应用 随机数生成 生成可重复的随机数

指定种子

本文表述了如何通过首先指定种子来重复生成随机数数组。每次使用相同种子初始化生成器时,始终都可以获得相同的结果。

首先,初始化随机数生成器,以使本示例中的结果具备可重复性。

rng('default');

现在使用种子 1 初始化生成器。

rng(1);

然后创建随机数数组。

A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

重复同样的命令。

A = rand(3,3)
A =

    0.5388    0.2045    0.6705
    0.4192    0.8781    0.4173
    0.6852    0.0274    0.5587

第一次调用 rand 改变了生成器的状态,所以第二次调用的结果不同。

现在使用之前的种子重新初始化生成器。然后将再次生成第一个矩阵 A。

rng(1);
A = rand(3,3)
A =

    0.4170    0.3023    0.1863
    0.7203    0.1468    0.3456
    0.0001    0.0923    0.3968

在某些情况下,只设定种子并不能保证相同的结果。这是因为代码执行时,随机数函数所用的生成器可能与您所期望的不同。要确保长期可重复性,应同时指定种子和生成器类型。

例如,以下代码将种子设定为 1 并将生成器设置为梅森旋转。

rng(1,'twister');

当您希望实现下列结果时,应同时设置种子和生成器:

应确保如今编写的代码在以后的 MATLAB 版本中运行时该时可返回相同的结果。

应确保在使用当前版本时,您在以前 MATLAB 版本中编写的代码可返回相同的结果。

保存和恢复生成器设置

本示例显示如何通过保存和恢复生成器设置来创建可重复随机数数组。需要保存和恢复生成器设置的最常见原因是为了重现算法或迭代中某一特定点产生的随机数。例如,可以在调试时使用生成器设置作为辅助工具。与重新提供种子(该方法会对生成器进行重新初始化)不同,此方法让您能够随时保存和恢复生成器的设置。

首先,初始化随机数生成器,以使本示例中的结果具备可重复性。

rng(1,'twister');

创建 1 到 10 之间的随机整数值数组。

A = randi(10,3,3)
A = 3×3

     5     4     2
     8     2     4
     1     1     4

第一次调用 randi 改变了生成器的状态。在第一次调用结构体 s 中的 randi 后,保存生成器设置。

s = rng;

创建另一个由 1 到 10 之间的随机整数值组成的数组。

A = randi(10,3,3)
A = 3×3

     6     3     7
     5     9     5
     7     1     6

现在,将生成器恢复为在 s 中存储的以前状态,并重新生成第二个数组 A。

rng(s);
A = randi(10,3,3)
A = 3×3

     6     3     7
     5     9     5
     7     1     6
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结冰架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值