2015-01-07 2 views
4

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

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

+0

Если вы ищете библиотеку, возможно, у apache commons math есть что-то для подобных случаев. (Хотя в этом случае, вероятно, http://softwarerecs.stackexchange.com/ лучший сайт, чтобы спросить.) –

ответ

4

1) Используйте реализацию библиотеки, как это было предложено Димой.

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

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

2

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

MultivariateNormalDistribution mnd = new MultivariateNormalDistribution(means, covariances); 
double vals[] = mnd.sample(); 
Смежные вопросы