Matlab生成数据

本文介绍了在Matlab中如何生成各种类型的随机数,包括均匀分布、正态分布以及指定范围的随机数。通过设置种子和恢复生成器状态,可以实现随机数的重复生成,这对于算法调试和结果重现至关重要。此外,还展示了如何创建线性间隔向量。

创建随机数

有四种基本随机数函数:rand、randi、randn 和 randperm。rand 函数返回在 0 和 1 之间均匀分布的实数。例如,

r1 = rand(1000,1);
r1 是一个含有均匀分布浮点实数的 1000 x 1 的列向量。r1 中的所有值均处于开区间 (0, 1) 内。这些值的直方图大致上是扁平形状,这表明采样数相当均匀。
randi 函数返回离散均匀分布中的 double 整数值。例如,

r2 = randi(10,1000,1);
r2 是一个包含范围在 1,2,…,10 的离散均匀分布整数值的 1000×1 列向量。这些值的直方图大致上是扁平形状,这表明从 1 到 10 之间采样数相当均匀。
randn 函数返回标准正态分布中的浮点实数数组。例如,

r3 = randn(1000,1);
r3 是一个含有标准正态分布数的 1000 x1 的列向量。r3 的直方图看似大致上均值为 0 且标准差为 1 的正态分布。
可以使用 randperm 函数创建没有重复值的随机整数值数组。例如,

r4 = randperm(15,5);
r4 是一个包含在闭区间 [1、15] 内随机选择的整数值的 1 x 5 数组。与可返回包含重复值的数组的 randi 不同,randperm 返回的数组没有重复值。
接连调用上述任一函数均可返回不同的结果。这种特性适合用于创建几个不同的随机值数组。

生成可重复的随机数

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

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

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 参考页来了解可用的生成器列表。

保存和恢复生成器设置
本示例显示如何通过保存和恢复生成器设置来创建可重复随机数数组。需要保存和恢复生成器设置的最常见原因是为了重现算法或迭代中某一特定点产生的随机数。例如,可以在调试时使用生成器设置作为辅助工具。

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

rng(1,‘twister’);
在结构体 s 中保存生成器的设置。

s = rng;
创建 1 到 10 之间的随机整数值数组。

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

 5     4     2
 8     2     4
 1     1     4

重复同样的命令。

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

 6     3     7
 5     9     5
 7     1     6

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

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

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

 5     4     2
 8     2     4
 1     1     4

与重新提供种子(该方法会对生成器进行重新初始化)不同,此方法让您能够随时保存和恢复生成器的设置。

具有特定均值和方差的正态分布随机数

添加链接描述

指定范围的随机数

R = unifrnd(A,B) 连续
R = unidrnd(A,B) 离散
生成被A和B指定上下端点[A,B]的连续均匀分布的随机数组R。
如果A和B是数组,R(i,j)是生成的被A和B对应元素指定连续均匀分布的随机数。
如果N或P是标量,则被扩展为和另一个输入有相同维数的数组。
R = unifrnd(A,B,m,n,…) 或 R = unifrnd(A,B,[m,n,…])
返回mn…数组。
如果A和B是标量,R中所有元素是相同分布产生的随机数。
如果A或B是数组,则必须是mn…数组。
添加链接描述

产生线性间隔向量

%创建一个从1到10的100个线性间隔的向量,大小为1x100;
s6 = linspace(1,10);

%创建一个从0到10的6=[(10-0)/2+1]个线性间隔数的向量,大小为1x6;
s7 = linspace(0,10,6);

参考 https://ww2.mathworks.cn/help/matlab/math/create-arrays-of-random-numbers.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值