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

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

【问题讨论】:

标签: matlab random numbers integer


【解决方案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】:

【讨论】:

    【解决方案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”中提到的问题

            【讨论】:

              猜你喜欢
              • 2016-05-09
              • 2018-04-08
              • 2014-01-29
              • 2016-05-04
              • 2013-12-14
              • 2010-12-24
              • 1970-01-01
              相关资源
              最近更新 更多