генерировать случайные числа с этим (дискретным) распределением. Функция вероятности передается как необязательный четвертый входной аргумент

:

Допустим, я хочу сгенерировать дискретные однородные случайные числа со значением -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 в этом примере.

Ответы на вопрос(2)

Ваш ответ на вопрос