Преподаватель
Лобач Виктор Иванович
доцент кафедры ММАД,
кандидат физ.-мат. наук
Минск 2020
Задание 1
1. Постановка задачи
Вариант 11:
Осуществить моделирование n=1000 реализаций БСВ с помощью
мультипликативного конгруэнтного метода (МКМ-датчика) при следующих значениях
параметров датчика:
β=a 0=32771 , M =231
2. Теоретическое обоснование
y z M [ z / M ],
M 2 31 2147483648, 0* 65539.
def rng(x):
return (32771 * x) % TWO
def chi_square(random_values):
values_amount = dict(zip(Counter(random_values).keys(),
Counter(random_values).values()))
2
cells = {}
for i in range(0, CELL_SIZE):
cells[i] = 0
expected_frequency = len(random_values)/CELL_SIZE
chi = 0
for frequency in cells.values():
chi += (frequency - expected_frequency)**2 / expected_frequency
return chi
def ks_test(random_values):
N = len(random_values)
D_plus =[]
D_minus =[]
random_values.sort()
3
Задание 2
1. Постановка задачи
Вариант 11. К = 128
Осуществить моделирование n = 1000 реализаций БСВ с помощью метода
Макларена-Марсальи (один датчик должен быть мультипликативно
конгруентный (п.1), второй – на выбор).
K – объем вспомогательной таблицы.
2. Теоретическое обоснование
4
def rng(x):
return (32771 * x) % TWO
def chi_square(random_values):
values_amount = dict(zip(Counter(random_values).keys(),
Counter(random_values).values()))
cells = {}
for i in range(0, CELL_SIZE):
cells[i] = 0
expected_frequency = len(random_values)/CELL_SIZE
chi = 0
for frequency in cells.values():
chi += (frequency - expected_frequency)**2 / expected_frequency
return chi
def ks_test(random_values):
N = len(random_values)
D_plus =[]
D_minus =[]
# Calculate max(i/N-Ri)
for i in range(1, N + 1):
x = i / N - random_values[i-1]
D_plus.append(x)
# Calculate max(Ri-((i-1)/N))
for i in range(1, N + 1):
y =(i-1)/N
y =random_values[i-1]-y
D_minus.append(y)
def mclar(k):
V = []
b = []
c = [32771,]
result = []
for i in range(0, 1000):
c.append(rng(random_values[i]))
b.append(random.random())
c = [n / TWO for n in random_values]
for i in range(k):
V.append(b[i])
for i in range(k):
result.append(V[int(c[i]*k)])
V[int(c[i]*k)] = b[i+k]
5
return result
print(chi_square(mclar(128)))
print(ks_test(mclar(128)))
Задание 3
1. Постановка задачи
Проверить точность моделирования обоих датчиков (п. 1 и п. 2) с помощью
критерия согласия Колмогорова и χ2-критерия Пирсона с уровнем
значимости ε = 0.05.
2. Теоретическое обоснование
6
2 - критерий Пирсона имеет вид:
H 0 , если ,
2
принимается гипотеза
H1 , если ,
2
3. Реализация на Python
def ks_test(random_values):
N = len(random_values)
D_plus =[]
D_minus =[]
# Calculate max(i/N-Ri)
for i in range(1, N + 1):
x = i / N - random_values[i-1]
D_plus.append(x)
# Calculate max(Ri-((i-1)/N))
for i in range(1, N + 1):
y =(i-1)/N
y =random_values[i-1]-y
7
D_minus.append(y)
def mclar(k):
V = []
b = []
c = [32771,]
result = []
for i in range(0, 1000):
c.append(rng(random_values[i]))
b.append(random.random())
c = [n / TWO for n in random_values]
for i in range(k):
V.append(b[i])
for i in range(k):
result.append(V[int(c[i]*k)])
V[int(c[i]*k)] = b[i+k]
return result