在MATLAB中生成一定范围内的随机数

Posted

技术标签:

【中文标题】在MATLAB中生成一定范围内的随机数【英文标题】:Generate a random number in a certain range in MATLAB 【发布时间】:2011-07-01 22:59:48 【问题描述】:

如何在 MATLAB 中生成 13 到 20 之间的随机数?

【问题讨论】:

MATLAB generate random numbers 的可能重复项 Is there a way in Matlab using the pseudo number generator to generate numbers within a specific range?的可能重复 这需要更多信息....您希望它们在 [13, 20] 之间连续吗?是区间 [13,20] 还是 (13,20) 等。它们应该同样可能吗?您是否考虑过分布? 【参考方案1】:

如果您正在寻找均匀分布的伪随机整数,请使用:

randi([13, 20])

【讨论】:

cant n = 13 + (rand(1) * 7) 给出均匀分布的伪随机整数? @user581544: 除非你调用 round(n)。 @crowso 实际上一点也不。值 13 和 20 的概率是其他值的一半。用这个来看看我的意思:hist(round(13 + (rand(1, 10000) * 7)), 8). @SecretAgentMan 是均匀分布,但它在开区间 (0,1) 上,所以永远不会出现 0 和 1。在 MATLAB 中输入 help rand ...“返回一个 N×N 矩阵,其中包含从开区间 (0,1) 上的标准均匀分布中提取的伪随机值。” 13 和 20 出现频率降低一半的更大原因是因为round 舍入到最接近的整数。由于 n 的函数将给出 >13 和 @James,我一定一直在想randn。你是对的:rand 确实是从 U(0,1) 生成的。开区间或闭区间的问题实际上并不重要,因为在 [0,1] 上生成任何数字的概率为零(包括端点)。概率密度函数定义在闭区间 [0,1] 上。不知道睡眠不足是我之前评论的错误。谢谢指正。【参考方案2】:

http://www.mathworks.com/help/techdoc/ref/rand.html

n = 13 + (rand(1) * 7);

【讨论】:

【参考方案3】:
r = 13 + 7.*rand(100,1);

其中 100,1 是所需向量的大小

【讨论】:

【参考方案4】:

ocw.mit.edu 是一个很好的资源,帮助了我很多。 randi 是最好的选择,但如果您喜欢数字,请尝试使用带有 rand 的 floor 函数来获得您想要的东西。

我画了一个数轴并想出了

floor(rand*8) + 13

【讨论】:

【参考方案5】:

你也可以使用:

round(mod(rand.*max,max-1))+min

【讨论】:

不在 [min,max] 范围内,也不是均匀分布,这是问题隐含的。 模数通常难以预测并且难以用于随机数生成。一般来说,很容易以非随机模式结束。最好只使用rand @knedlsepp:为了通用性,我提到 13 的最小值和 20 的最大值(这是隐含的!也许最好将问题编辑为最小值和最大值)。你能指出结果的概率分布是什么。 @patrik:我没有审查该功能的实现。您能否解释一下为什么我们在使用模数时会错过随机模式?你有做任何实验吗? @moksef 我确实做到了。我猜它是消失的无偏见模式。在大多数情况下,模数喜欢围绕一些特定的数字形成。这些通常取决于选择了哪些数字。尝试使用您的函数生成一组数字。然后绘制直方图。尝试对不同的数字重复此操作。特别是,尝试将max-1 设置为二进制数和质数。我还没有尝试过这个算法,但猜测是这些应该表现得更好。【参考方案6】:

从均匀分布中生成值 区间 [a, b]。

      r = a + (b-a).*rand(100,1);

【讨论】:

【参考方案7】:

最好的解决方案是randint,但是这个函数产生整数。

你可以使用rand带舍入功能

  r = round(a + (b-a).*rand(m,n));

这会在 a 和 b 之间产生实数随机数,输出矩阵的大小是 m*n

【讨论】:

randint 已过时。在旧版本中,它需要 Communications Toolbox。即使您使用的是旧版本,也不要再使用此功能 randi 在设定范围内生成均匀分布的整数【参考方案8】:

如果您希望随机生成特定范围内的所有数字,那么您可以尝试

r = randi([a b],1,d)

a = 起点

b = 终点

d = 您要生成多少个数字,但请记住 d 应小于或等于 b-a

【讨论】:

【参考方案9】:

如果你需要一个介于 13 到 20 之间的浮动随机数

(20-13).*rand(1) + 13

如果你需要一个介于 13 到 20 之间的整数随机数

floor((21-13).*rand(1) + 13)

注意:通过将 20 替换为 21 来修复评论“这不包括 20”中提到的问题

【讨论】:

以上是关于在MATLAB中生成一定范围内的随机数的主要内容,如果未能解决你的问题,请参考以下文章

在 Julia 中生成范围内的随机整数

如何在[0,5]范围内的fortran 90中生成整数随机数?

在熊猫中生成给定范围内的随机日期

Java如何生成一定范围内的随机数? [复制]

如何在 Java 中生成特定范围内的随机整数?

如何在 Java 中生成特定范围内的随机整数?