在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中生成一定范围内的随机数的主要内容,如果未能解决你的问题,请参考以下文章