Форум программистов, компьютерный форум CyberForum.ru

Генерация - псевдослучайные данные. Линейные конгруэнтные генераторы - Python

Восстановить пароль Регистрация
 
xcode
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 48
25.10.2016, 06:10     Генерация - псевдослучайные данные. Линейные конгруэнтные генераторы #1
добрый день,

Пытаюсь выполнить задание.
1. Используя метод вычетов, сгенерировать последовательность из 1000 псевдослучайных чисел.
2. Осуществить проверку полученного генератора.
■ Оценить математическое ожидание полученной последовательности.
■ Оценить дисперсию полученной последовательности.
■ Оценить корреляционную функцию полученной последовательности по графикам При построении первого графика ограничиться первыми 20 значениями, второй график строится для всего множества сгенерированных значений.
■ Используя метод гистограмм, проверить гипотезу о законе распределения
Вот учебник
Но дело в следующем, меня смущает генерация. Подскажите как сгенерировать псевдослучайные данные, По условию у нас даны рекомендуемые параметры:
m = 231-1 =2 147 483 647
а = 630 360 016
Z0 = 4
Таким образом, наша функция приобретает вид:
Zi+1 = (a*Zi ) (mod m),

Вот тут какую функцию использовать ?....
r = random.randint(0, (a*Zmod1) % m, N)
print((r*r) % m)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import math
import cmath
import matplotlib.pyplot as plt
from numpy import random
 
 
# Переменные из задания
N = 1000
m = 2147483647
a = 630360016
Z0 = 4
Zmod1 = (a*Z0) % m #Вычисление модуля для Z0 (373 956 417)
r = random.randint(0, (a*Zmod1) % m, N)
 
print((r*r) % m)
 
#radnom.seed((a*Zmod1) % m)
#y = [random.uniform(-1,Z) for i in x]
x = range(N)
plt.plot(x, r, 'o')
plt.show()
 
 
y = [random.random() for i in range(1000)]
 
plt.hist(y, 20)
plt.show()
 
from numpy import random, mean, var, std
xm = mean(r)
xv = var(r)
xs = std(r)
print (N, xm, xv, xs)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2016, 06:10     Генерация - псевдослучайные данные. Линейные конгруэнтные генераторы
Посмотрите здесь:

Псевдослучайные числа g++
Случайные(псевдослучайные) числа C++
C# Класс Random может генерировать псевдослучайные числа типа
Генерировать псевдослучайные числа линейным конгруэнтным методом через рекуррентную формулу C (СИ)
Трёхфазные генераторы
C++ Случайные или псевдослучайные числа?
Генераторы списков Python
Функции генераторы и выражения генераторы Python
C# Псевдослучайные числа (метод середин квадратов)
Python Генераторы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xcode
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 48
26.10.2016, 12:44  [ТС]     Генерация - псевдослучайные данные. Линейные конгруэнтные генераторы #2
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import math
 
 
N = 1000 # Число генераций
m = 2147483647 # просто число
a = 630360016 # просто число
Z0 = 4 #просто число
 
def lkm(): # объявление функции
  global x # глобазируем
  x = (a*x) % m # формула Zi+1 = (a*Zi ) (mod m) 
  return int(x) # вернуть x как integer (целое число)
 
x=Z0 # начиная с числа Zo которое = 4 
for i in range(0,N): #цикл 
    print(lkm())
Помогите. Как теперь по полученной последовательности чисел отображаемой через print, получить mean-среднее, var-дисперсию, std - стандрт отклонение?
Пример:
Python
1
2
3
4
5
6
7
8
9
10
N = 10**6
from numpy import random, mean, var, std
x = random.uniform(-1, 1, size=N)
xm = mean(x)  # среднее значение
xv = var(x)   # дисперсия
xs = std(x)   # СКО
print '''Number: %d
mean:   %.2e
var:    %.2e
stdev:  %.2e''' % (N, xm, xv, xs)
Yandex
Объявления
26.10.2016, 12:44     Генерация - псевдослучайные данные. Линейные конгруэнтные генераторы
Ответ Создать тему
Опции темы

Текущее время: 23:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru