2015-08-05 3 views
-1

Мне нужно генерировать случайные числа в группах: 100, 500, 1000 и 10000 номеров униформы и гауссиан. Это необходимо для создания некоторых гистограмм и других статистических материалов.Алгоритм случайных чисел

Условие не в том, чтобы использовать нативную случайную функцию python, поэтому я думал использовать этот метод (линейный конгруэнтный генератор): Xn+1 ≡ (aXn + c) mod m. Здесь мне нужны 4 переменные. Может кто-нибудь, пожалуйста, скажите мне, как я могу реализовать этот алгоритм? Я предполагаю, что м переменная первое время

+0

Сомневаюсь, что вы найдете хороший линейный конгруэнтный генератор с m = 100. Вы должны смотреть на генераторы с гораздо большим m. Еще лучше, если у вас есть время, используйте Mersenne Twister. Затем используйте другие методы, чтобы получить окончательный результат в единый диапазон, который вы хотите, или преобразовать выходные данные вашего генератора в гауссианцев (здесь были разные предыдущие вопросы по подобным темам, поэтому посмотрите их). –

+0

я попытался это: п = 1 с = 3 х = 0 м = 100 для г в диапазоне (100): х = (а * х + с)% м –

+0

вы так много Дэвида , я выберу –

ответ

1

Вы уже знаете, что это Linear congruential generator, так что так трудно читать его?

Это говорит вам формулу, которую вы уже знаете enter image description here и объяснение того, как вы должны выбрать их:

Период общего LCG составляет не более м, а для некоторых выборов фактора гораздо меньше что. При условии, что смещение с не равно нулю, LCG будет иметь полный период для всех значений семян, если и только если:

1) с и т взаимно просты

2) - 1 делится на все простые множители м

3) а - 1 кратно 4, если т кратно 4.

Они даже дать вам некоторые примеры этих значений в таблице ниже. Этого более чем достаточно для реализации простой функции:

def LCG(seed, n, a=1664525, c=1013904223, m=2**32): 
    numbers = [] 
    for i in xrange(n): 
     seed = (a * seed + c) % m 
     numbers.append(seed) 

    return numbers 

print LCG(3, 5) 
+0

Большое спасибо, что я сальвадор, я действительно его оцениваю –

Смежные вопросы