3

我需要一些关于如何使用 Matlab 生成奇数随机数的帮助。你如何在给定的间隔内生成奇数随机数,比如在 1 到 100 之间?

4

1 回答 1

9

好吧,如果我可以在一个区间内生成偶数随机数,那么我只需加 1。:)

这并不像听起来那么愚蠢。

你能生成随机整数吗?如果可以,为什么不乘以 2?然后你会有 EVEN 随机整数。请参阅上文了解下一步该做什么。

MATLAB 中有一些工具可以在一个区间内生成随机整数。如果没有,那么您可以轻松编写自己的代码。例如,这是做什么的:

r = 1 + 2*floor(rand(N,1)*50);

或这个:

r = 1 + 2*randi([0 49], N,1);

请注意,Rody 编辑了这个答案,但在使用 randi 时犯了一个错误。我已经纠正了这个问题。请注意,当我更改它时,randi 故意在其采样中仅上升到 49。这是有效的,因为 2*49 + 1 = 99。

那么在兰特的情况下呢?为什么我在那里乘以 50,而不是 49?这取自 rand 的文档:

“r = rand(n) 返回一个 n×n 矩阵,其中包含从开区间 (0,1) 上的标准均匀分布中提取的伪随机值。”

所以 rand 永远不会生成一个精确的 1。它可以生成一个略小于 1 的数字,但永远不会生成 1。所以当我乘以 50 时,这会导致一个数字永远不会恰好是 50,而只是可能略小于 50。地板然后以基本相等的概率生成 0 到 49 之间的所有整数。我想有人会指出,因为 0 永远不是 rand 的可能结果,所以整数 0 将被这个表达式欠采样,数量为 eps 的数量级。如果您将生成这么多样本,您可以看到这种欠采样程度,那么您将需要一台更大、更快的计算机来完成您的工作。:)

于 2012-10-08T02:07:40.970 回答