Добавил:
yurochka
Периодически делаю учебные работы по предметам ЛЭТИ и выгружаю их сюда для пополнения базы, с которой можно будет свериться.
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная 2 / Вариант 10 / Lab2
.pyimport matplotlib.pyplot as plt
import numpy as np
class LFrog:
def __init__(self, r, M, seed=1):
self.r = r
self.M = M
self.modulus = 2 ** r
self.A = seed
def next(self):
x = (self.A * self.M) % self.modulus
self.A = x
return x / self.modulus
class DiscreteRV:
def __init__(self, xj, pj):
self.z = LFrog(32, 3**12)
self.Pj = [sum(pj[:i+1]) for i in range(len(pj))]
self.xj = xj
self.pj = pj
def next(self):
z = self.z.next()
for p in range(len(self.Pj)):
if z <= self.Pj[p]:
return self.xj[p]
x = np.array([-58.2, -57.7, -47.3, -30.2, -13.1, 20.0, 76.1])
p = [0.105, 0.091, 0.220, 0.052, 0.271, 0.124, 0.137]
a = DiscreteRV(x, p)
A = []
N = 500
for i in range(N):
A.append(a.next())
print("Первые 30 значений")
for i in range(30):
print(A[i])
M = sum(A) / N
D = sum([x ** 2 for x in A]) / N - M ** 2
print(f"Эмпирические: M = {M:.5f}, D = {D:.5f}")
M_exp = sum([p[j] * x[j] for j in range(len(p))])
D_exp = sum([p[j] * x[j] ** 2 for j in range(len(p))]) - M_exp ** 2
print(f"Теоретические: M = {M_exp:.5f}, D = {D_exp:.5f}")
edges = (x[:-1] + x[1:]) / 2
bins = np.concatenate(([x[0] - (edges[0] - x[0])], edges, [x[-1] + (x[-1] - edges[-1])]))
plt.hist([A, x], bins=bins,
weights=[np.ones_like(A) / len(A), np.ones_like(x) * p],
label=['Эмпирическое', 'Теоретическое'])
plt.legend(loc='upper left')
plt.savefig("Leha/ms2.svg")
plt.show()
Соседние файлы в папке Вариант 10
