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