Проблема состоит в том, что randn
генерирует случайные числа, которые соответствуют стандарту Нормальное распределение , например Нормальный (mu = 0, std = 1).
Как указывает @Banghua Zhao, вам нужна функция randi
, и я добавлю, что они будут равномерно распределены по целым числам (включительно) между этими целочисленными границами (известными как дискретное равномерное распределение ).
Код 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'})
РЕДАКТИРОВАТЬ: По предложению @ Макс, я добавил 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)]})