Я хочу получить случайные числа N, сумма которых является значением.
Например, давайте предположим, что я хочу 5 случайных чисел та сумма к 1.
Затем допустимая возможность:
0.2 0.2 0.2 0.2 0.2
Другая возможность:
0.8 0.1 0.03 0.03 0.04
И так далее. Мне нужно это для создания матрицы имущества для Нечетких C-средств.
Краткий ответ:
Просто сгенерируйте N случайных чисел, вычислите их сумму, разделите каждое на сумму и умножьте на M.
Более длинный ответ:
Приведенное выше решение не дает равномерное распределение, которое может быть проблемой в зависимости от того, для чего используются эти случайные числа. Другой метод, предложенный Матти Вирккуненом. :
Сгенерировать N-1 случайных чисел от 0 до 1, добавить сами числа 0 и 1 в список, отсортировать их и взять разности соседних чисел.
Я не уверен, что это дает равномерное распределение
Вы немного ограничены в ограничениях. Много-много процедур подойдут.
Например, нормально ли распределяются числа? Равномерно?
Я предполагаю, что все числа должны быть положительными и равномерно распределены вокруг среднего, M / N.
Попробуйте это.
Теперь у вас есть N случайных чисел, и их сумма является желаемой суммой.
В Java:
private static double[] randSum(int n, double m) {
Random rand = new Random();
double randNums[] = new double[n], sum = 0;
for (int i = 0; i < randNums.length; i++) {
randNums[i] = rand.nextDouble();
sum += randNums[i];
}
for (int i = 0; i < randNums.length; i++) {
randNums[i] /= sum * m;
}
return randNums;
}
Создать N-1 случайных чисел от 0 до 1, добавить в список сами числа 0 и 1, отсортировать их и взять разности соседних чисел.
Думаю, стоит отметить, что принятый в настоящее время ответ не дает равномерного распределения:
«Просто сгенерируйте N случайных чисел, вычислите их сумму, разделите каждое на сумма "
Чтобы убедиться в этом, давайте рассмотрим случай N = 2 и M = 1. Это тривиальный случай, поскольку мы можем сгенерировать список [x, 1-x], выбрав x равномерно в диапазоне (0,1).
Предлагаемое решение генерирует пару [x / (x + y), y / (x + y)], где x и y равномерны в (0,1). Чтобы проанализировать это, мы выбираем такое z, что 0 Prob (x / (x + y) Я сделал несколько быстрых вычислений, и оказалось, что единственное решение, которое на данный момент может приводить к равномерному распределению, было , предложенным Матти Вирккуненом : «Сгенерировать N-1 случайных чисел от 0 до 1, добавьте сами числа 0 и 1 в список, отсортируйте их и возьмите разности соседних чисел. "