генерировать случайные числа с этим (дискретным) распределением. Функция вероятности передается как необязательный четвертый входной аргумент
:
Допустим, я хочу сгенерировать дискретные однородные случайные числа со значением -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
Есть ли математический трюк с Matlab для этого? без использования цикла for.
Гистограмма SDUD (с 10000 значениями и n = 100) выглядит следующим образом:
Бонус:
Было бы здорово, если бы исходные дискретные значения могли быть изменены. Таким образом, вместо [-1,1] дискретное значение может быть, например, [0,1,2], каждое с вхождением p = 1 / number_of_discrete_value, так что 1/3 в этом примере.