【问题标题】:Generating larger random integers - MATLAB生成更大的随机整数 - MATLAB
【发布时间】:2019-04-13 13:44:41
【问题描述】:

尝试为 x 分配适当的值,这将导致 1 到 60 之间的随机整数。有什么建议吗?我做了randn,但一次又一次地得到小数字。到目前为止的代码如下:

function s = Q11sub1(x)
    x =                 % <------ Question is what goes here
    if x <= 30      
        s = "small";       
    elseif x > 30 & x <= 50       
        s = "medium";  
    else    
        s = "high";  
    end
end

【问题讨论】:

  • 如果您在使用特定程序时遇到问题请向我们展示该程序。向我们展示您是如何使用 randn 的,我们可以帮助您找出为什么它没有达到您的预期。
  • 我注意到您的x &gt; 30 检查是多余的。如果是&lt;= 30,那么您已经执行了if 的结果。
  • @EricLippert, randn 从标准正态分布生成连续随机变量,例如N(平均值 = 0,标准 = 1)。出于此目的,该功能完全错误。
  • 是的,这就是对开始学习 MATLAB 及其功能的学生所说的全部内容。 学生会犯错误,即使用“randn”而不是“randi”。当一个简单的“尝试兰迪”就足够时,不需要所有充满问题的被动攻击性答案。谢谢。

标签: matlab random integer


【解决方案1】:

问题是randn 生成遵循标准Normal distribution 的随机数,例如正常(mu = 0,std = 1)。

正如@Banghua Zhao 指出的那样,您需要 randi 函数,我将添加它们将均匀分布在这些整数边界(称为 discrete uniform distribution)之间的整数(包括)上。
代码X = randi([a b],N,M) 将生成一个 NxM 整数矩阵,该矩阵均匀分布在区间 [a,b] 上。调用 randi(Imax) 默认下限为 1。

请参阅下面的区别。

N = 500;    % Number of samples
a = 1;      % Lower integer bound
b = 60;     % Upper integer bound

X = randi([a b],N,1);   % Random integers between [a,b]
Y = randn(N,1);

figure, hold on, box on
histogram(X)
histogram(Y)
legend('randi[1,60]','randn','Location','southeast')
xlabel('Result')
ylabel('Observed Frequency')
title({'randi([a b],N,1) vs randn(N,1)';'N = 500'})

编辑:根据@Max 的建议,我添加了60*randn

% MATLAB R2017a
W = 60*randn(N,1);     

figure, hold on, box on
hx = histogram(X,'Normalization','pdf')
hw = histogram(W,'Normalization','pdf')
legend('randi[1,60]','60*randn','Location','southeast')
xlabel('Result')
ylabel('Observed Estimated Density')
title({'randi([a b],N,1) vs 60*randn(N,1)';['N = ' num2str(N)]})

【讨论】:

  • 也许,randi 和 randn 之间的区别会变得更加明显,如果你将 randn 乘以 60,然后再次绘图
  • @Max,感谢您的建议。我想到了这一点,但我不清楚 OP 是如何使用randn 的。但是你的建议是可靠的,我会在有机会时更新。谢谢。
【解决方案2】:

使用randi:

randi(60)

这将为您提供一个介于 1 到 60 之间的伪随机整数。

参考:https://www.mathworks.com/help/matlab/ref/randi.html

【讨论】:

  • 我已经投了赞成票,但想补充一下,它们将均匀分布在这些界限之间的整数(称为discrete uniform distribution)。
猜你喜欢
  • 2010-12-25
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 2018-10-09
  • 2014-08-22
  • 2016-03-18
  • 1970-01-01
  • 2015-08-05
相关资源
最近更新 更多