В этом примере показано, как сгенерировать случайные числа с помощью метода равномерной инверсии распределения. Это полезно для распределений, когда возможно вычислить обратную совокупную функцию распределения, но нет поддержки для дискретизации из распределения непосредственно.
Использование rand
чтобы сгенерировать 1000 случайных чисел из равномерного распределения по интервалу (0,1).
rng('default') % For reproducibility u = rand(1000,1);
Метод инверсии основывается на принципе, что непрерывные совокупные функции распределения (cdfs) равномерно варьируются в открытом интервале (0,1). Если является равномерным случайным числом на (0,1), тогда генерирует случайное число от любого непрерывного распределения с заданным cdf F
.
Используйте обратную совокупную функцию распределения, чтобы сгенерировать случайные числа из распределения Вейбула с параметрами A = 1
и B = 1
которые соответствуют вероятностям в u
. Постройте график результатов.
x = wblinv(u,1,1); histogram(x,20);
Гистограмма показывает, что случайные числа, сгенерированные с помощью обратной функции cdf Вейбула wblinv
иметь распределение Вейбула.
Те же значения в u
может сгенерировать случайные числа из любого распределения, для примера стандартного нормального, выполнив ту же процедуру с помощью обратного cdf требуемого распределения.
figure x_norm = norminv(u,1,1); histogram(x_norm,20)
Гистограмма показывает, что, используя стандартный нормальный обратный cdf norminv
, случайные числа, сгенерированные из u
теперь имеют стандартное нормальное распределение.
hist
| norminv
| rand
| wblinv