LINUX.ORG.RU

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

 , ,


0

1

subj. Для одномерной всё понятно: интегрирую плотность верятности f(x) что бы получить cumulative distribution function F(x). Дальше элементарно нахожу обратную функцию F^{-1}: x(R∈0..1) и получаю интересующие сэмплы подставляя в обратную функцию равномерное распределение, отыскивая конкретную точку бинарным поиском. Как такое же проделывается для многомерного распределения?

★★★★★

Точно так же, обобщение очевидно.

Пусть f(x_1,…,x_n) – ваша плотность. Разложите ее в произведение условных плотностей

f(x_1,...,x_n) = g_1(x_1)g_2(x_2|x_1)...g_n(x_n|x_1,...x_{n-1})

и сэмплируйте последовательно каждую одномерную компоненту одну за другой, начиная с x_1, по этим условным плотностям g_k(x_k|x_1,…x_{k-1}). Это делается тем же способом, который указан в посте.

Искать условные плотности – путем интегрирования:

g_k(x_k|x_1,...x_{k-1})=\frac{\int f(x)dx_{k+1}...dx_{n}}{\int f(x) dx_k...dx_n}.

Я не думаю, что это оптимальный метод из-за большого количества вычисляемых интегралов.

i586 ★★★★★
()
Последнее исправление: i586 (всего исправлений: 1)
Ответ на: комментарий от i586

Разложите ее в произведение условных плотностей

В общем случае это нельзя сделать. Предполагается что плотность вероятности заданна в n-мерном массиве.

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

Тогда все тривиально и от размерности пространства не зависит. Перечисляете элементы массива в любом удобном порядке и работаете с этой последовательностью как с одномерной.

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

Ну и внутри ячейки могут быть разные варианты, брать значения в центре ячейки не Ь. Можно равномерно размазываться по ячейке, можно брать по ячейке мультилинейную интерполяцию а дальше аналитика с разделением по координатам как выше предлагали.

AntonI ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)