Случайное многомерное нормальное распределение
Я столкнулся с проблемой, когда я должен быть в состоянии генерировать набор случайно выбранных чисел многомерного нормального распределения со средним 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();