Шаг 1:
Допустим, я хочу сгенерировать дискретные однородные случайные числа, принимающие значение -1 или 1. Поэтому, другими словами, я хочу сгенерировать числа, имеющие следующее распределение:
P(X = -1) = 0.5
P(X = 1) = 0.5
Чтобы создать массив из 100 этих чисел, я могу написать следующий код:
n = 100
DV = [-1,1]; % Discrete value
RI = unidrnd(2,n,1); % Random uniform index
DUD = DV(RI); % Discrete uniform distribution
Мой массив DUD выглядит следующим образом: [-1,1,1,1,-1,-1,1,-1,...]
Шаг 2:
Теперь я хотел бы сгенерировать 10 чисел, равных sum(DUD)
, поэтому 10 чисел имеют распределение, соответствующее сумме 100 чисел после дискретного равномерного распределения.
Конечно, я могу сделать это:
for ii = 1:10
n = 100;
DV = [-1,1]; % Discrete value
RI = unidrnd(2,n,1); % Random index
DUD = DV(RI); % Discrete uniform distribution
SDUD(ii) = sum(DUD);
end
С помощью
SDUD =
2 2 -6 -2 -4 2 4 4 0 2
Есть ли математический трюк / математический трюк для этого? без использования дляloop.
Гистограмма SDUD (с 10000 значениями и n = 100) выглядит следующим образом:
Бонус:
Будет здорово, если исходные дискретные значения могут быть изменены.Таким образом, вместо [-1,1] дискретное значение может быть, например, [0,1,2], каждое с вхождением p = 1 / number_of_discrete_value, поэтому 1/3 в этом примере.