Генерация больших случайных целых чисел - MATLAB - PullRequest
0 голосов
/ 10 ноября 2018

Попытка присвоить соответствующее значение 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

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Проблема состоит в том, что randn генерирует случайные числа, которые соответствуют стандарту Нормальное распределение , например Нормальный (mu = 0, std = 1).

Как указывает @Banghua Zhao, вам нужна функция randi, и я добавлю, что они будут равномерно распределены по целым числам (включительно) между этими целочисленными границами (известными как дискретное равномерное распределение ).
Код X = randi([a b],N,M) сгенерирует матрицу NxM целых чисел, равномерно распределенную на интервале [a, b] включительно. Для вызова randi(Imax) по умолчанию нижняя граница равна 1.

См. Разницу ниже.

Comparison of randi and randn

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'})

РЕДАКТИРОВАТЬ: По предложению @ Макс, я добавил 60*randn.

Comparison of randi and 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)]})
0 голосов
/ 10 ноября 2018

Использование randi:

randi(60)

Это даст вам псевдослучайное целое число от 1 до 60.

Ссылка: https://www.mathworks.com/help/matlab/ref/randi.html

...