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

Python: научные вычисления

Войти
Регистрация
Восстановить пароль
 
xcode
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 49
#1

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

25.10.2016, 06:10. Просмотров 462. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генерация - псевдослучайные данные. Линейные конгруэнтные генераторы (Python):

Функции генераторы и выражения генераторы - Python
Всем доброго времени суток, изучаю такую тему как Функции-генераторы и появился вопрос, для чего они могут пригодиться, к примеру есть...

Генераторы списков - Python
Небольшой вопрос по теме. Есть код. bookdirs = bs = bs = import os bs = fs = for b in bs: for d,dirs,files in b: ...

Форматирование строк и генераторы списков - Python
Доброго времени суток. Задача очень легка, вывести таблицу умножения на определенное число, заданное пользователем. Использовать при этом...

Псевдослучайные числа g++ - Кроссплатформенная разработка
Как сгенерить псевдослучайное число в диапазоне от 0 до 15? Как установить генератор?

Случайные(псевдослучайные) числа - C++
Здравствуйте! Я знаю, что было много тем по поводу рандомных чисел в С++.Но всё же. Возникла у меня проблема с получением большого...

Случайные или псевдослучайные числа? - C++
можно ли считать, такие числа случайными, если не знать какие операции и их последовательность производилось с переменной number? void...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xcode
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 49
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)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2016, 12:44
Привет! Вот еще темы с ответами:

Псевдослучайные числа (метод середин квадратов) - C#
Имеется генератор псевдослучайных чисел, работающий по-принципу середин квадратов. Т.е. если есть на входе число 1111, то функция возводит...

Класс Random может генерировать псевдослучайные числа типа - C#
A) byte, int, double B) Только byte C) Только int D) Только double

Генерировать псевдослучайные числа линейным конгруэнтным методом через рекуррентную формулу - C (СИ)
#include <stdio.h> #define LIMIT 30 main() { const int a=1103515245, c=12345, m=4294967296; int i; unsigned...

.NET 4.x Генераторы отчетов - C#
День добрый. Вопрос в образовательных целях. Какие есть генераторы отчетов для .NET Есть опыт написания отчетов на fastreport...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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