【发布时间】:2011-07-01 22:59:48
【问题描述】:
如何在 MATLAB 中生成 13 到 20 之间的随机数?
【问题讨论】:
-
这需要更多信息....您希望它们在 [13, 20] 之间连续吗?是区间 [13,20] 还是 (13,20) 等。它们应该同样可能吗?您是否考虑过分布?
标签: matlab random numbers integer
如何在 MATLAB 中生成 13 到 20 之间的随机数?
【问题讨论】:
标签: matlab random numbers integer
如果您正在寻找均匀分布的伪随机整数,请使用:
randi([13, 20])
【讨论】:
hist(round(13 + (rand(1, 10000) * 7)), 8).
help rand ...“返回一个 N×N 矩阵,其中包含从开区间 (0,1) 上的标准均匀分布中提取的伪随机值。” 13 和 20 出现频率降低一半的更大原因是因为round 舍入到最接近的整数。由于 n 的函数将给出 >13 和
randn。你是对的:rand 确实是从 U(0,1) 生成的。开区间或闭区间的问题实际上并不重要,因为在 [0,1] 上生成任何数字的概率为零(包括端点)。概率密度函数定义在闭区间 [0,1] 上。不知道睡眠不足是我之前评论的错误。谢谢指正。
http://www.mathworks.com/help/techdoc/ref/rand.html
n = 13 + (rand(1) * 7);
【讨论】:
r = 13 + 7.*rand(100,1);
其中 100,1 是所需向量的大小
【讨论】:
ocw.mit.edu 是一个很好的资源,帮助了我很多。 randi 是最好的选择,但如果您喜欢数字,请尝试使用带有 rand 的 floor 函数来获得您想要的东西。
我画了一个数轴并想出了
floor(rand*8) + 13
【讨论】:
你也可以使用:
round(mod(rand.*max,max-1))+min
【讨论】:
rand
max-1 设置为二进制数和质数。我还没有尝试过这个算法,但猜测是这些应该表现得更好。
从均匀分布中生成值 区间 [a, b]。
r = a + (b-a).*rand(100,1);
【讨论】:
最好的解决方案是randint,但是这个函数产生整数。
你可以使用rand带舍入功能
r = round(a + (b-a).*rand(m,n));
这会在 a 和 b 之间产生实数随机数,输出矩阵的大小是 m*n
【讨论】:
randint 已过时。在旧版本中,它需要 Communications Toolbox。即使您使用的是旧版本,也不要再使用此功能
randi 在设定范围内生成均匀分布的整数
如果您希望随机生成特定范围内的所有数字,那么您可以尝试
r = randi([a b],1,d)
a = 起点
b = 终点
d = 您要生成多少个数字,但请记住 d 应小于或等于 b-a
【讨论】:
如果你需要一个介于 13 到 20 之间的浮动随机数
(20-13).*rand(1) + 13
如果你需要一个介于 13 到 20 之间的整数随机数
floor((21-13).*rand(1) + 13)
注意:通过将 20 替换为 21 来修复评论“这不包括 20”中提到的问题
【讨论】: