Сгенерируйте случайные числа с помощью равномерной инверсии распределения

В этом примере показано, как сгенерировать случайные числа с помощью метода равномерной инверсии распределения. Это полезно для распределений, когда возможно вычислить обратную совокупную функцию распределения, но нет поддержки для дискретизации из распределения непосредственно.

Шаг 1. Сгенерируйте случайные числа из стандартного равномерного распределения.

Использование rand чтобы сгенерировать 1000 случайных чисел из равномерного распределения по интервалу (0,1).

rng('default')  % For reproducibility
u = rand(1000,1);

Метод инверсии основывается на принципе, что непрерывные совокупные функции распределения (cdfs) равномерно варьируются в открытом интервале (0,1). Если u является равномерным случайным числом на (0,1), тогда x=F-1(u) генерирует случайное число x от любого непрерывного распределения с заданным cdf F.

Шаг 2. Сгенерируйте случайные числа из распределения Вейбула.

Используйте обратную совокупную функцию распределения, чтобы сгенерировать случайные числа из распределения Вейбула с параметрами A = 1 и B = 1 которые соответствуют вероятностям в u. Постройте график результатов.

x = wblinv(u,1,1);
histogram(x,20);

Figure contains an axes. The axes contains an object of type histogram.

Гистограмма показывает, что случайные числа, сгенерированные с помощью обратной функции cdf Вейбула wblinv иметь распределение Вейбула.

Шаг 3. Сгенерируйте случайные числа из стандартного нормального распределения.

Те же значения в u может сгенерировать случайные числа из любого распределения, для примера стандартного нормального, выполнив ту же процедуру с помощью обратного cdf требуемого распределения.

figure
x_norm = norminv(u,1,1);
histogram(x_norm,20)

Figure contains an axes. The axes contains an object of type histogram.

Гистограмма показывает, что, используя стандартный нормальный обратный cdf norminv, случайные числа, сгенерированные из u теперь имеют стандартное нормальное распределение.

См. также

| | |

Похожие темы