Случайное многомерное нормальное распределение

Я столкнулся с проблемой, когда я должен быть в состоянии генерировать набор случайно выбранных чисел многомерного нормального распределения со средним 0 и заданной 3*3 дисперсионно-ковариационной матрицей в Java.

Есть ли простой способ сделать это?

2 ответа

Решение

1) Использовать библиотечную реализацию, как предлагает Дима.

Или, если вы действительно чувствуете жгучую потребность сделать это самостоятельно:

2) Предполагая, что вы хотите сгенерировать нормали со средним вектором M и дисперсионной / ковариационной матрицей V, выполните разложение Холецкого на V, чтобы получить нижнюю треугольную матрицу L, такую, что V = LLt (где верхний индекс t указывает на транспонирование). Генерация вектора Z из трех независимых стандартных нормалей (используя Random.nextGaussian() чтобы получить отдельные элементы). затем LZ + M будет иметь желаемое многомерное нормальное распределение.

Apache Commons имеет то, что вы ищете:

MultivariateNormalDistribution mnd = new MultivariateNormalDistribution(means, covariances);
double vals[] = mnd.sample();
Другие вопросы по тегам