Генерация 2 случайных чисел - PullRequest
0 голосов
/ 25 декабря 2018

Как сгенерировать два случайных числа α, β ~ U [-1, + 1] , если β ≥ α ?

Моим первым намерением было простосгенерируйте два вектора и возьмите только те, которые удовлетворяют β ≥ α и отбросьте остальные.

Однако я думаю, что это может изменить распределение.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Ответ Безумного Физика уже довольно широк, хотя второе из указанных решений дает результаты, которые на самом деле не случайны, так как взятие α ~ U [-1, +1] сначала приведет к перекосу вправо и β ~ U [-1, +1] переместится влево.

Для этой проблемы наиболее простым решением будет генерирование α и β , а затем поменяйте их местами, если β <α </strong>.Результаты будут равномерно распределены.В Matlab:

a = 2 * rand - 1;
b = 2 * rand - 1;
if b < a
    [b, a] = deal(a, b);
end
disp(a)
disp(b)

Если вы имеете в виду числа как целые числа , тогда просто примените метод выше для целых чисел.В Matlab:

a = randi([-1, 1]);
b = randi([-1, 1]);
if b < a
    [b, a] = deal(a, b);
end
disp(a)
disp(b)
0 голосов
/ 25 декабря 2018

У вас есть несколько простых опций, но некоторые немного искажают распределение.

Самое простое - сгенерировать пару чисел и поменять их местами в соответствии с вашими условиями, если это необходимо.Это должно привести к равномерному распределению.

Другой вариант - сначала сгенерировать α ~ [-1, +1], а затем сгенерировать β ~ U [α, +1].Кроме того, вы можете сначала сгенерировать β ~ [-1, +1], а затем α ~ [-1, β].Эта опция может быть искажена, поскольку второе число генерируется неравномерно.

Возможно, лучшим подходом было бы создание отображения вектора (α, β) 1: 1 на числовую линию.Затем сгенерируйте одно число и преобразуйте его в двухмерный вектор.Это может обеспечить равномерное распределение вектора, если отображение выбрано надлежащим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...