exponenta event banner

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

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

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

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

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

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

Шаг 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 теперь имеют стандартное нормальное распределение.

См. также

| | |

Связанные темы