
Добавил:
firefly-tihohodka
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛР 2 / lab2
.pyfrom math import *
import numpy as np
import random
from scipy.stats import uniform
import matplotlib.pyplot as plt
import time
def main():
start_time = time.time()
a, b = 10, 25
mass = []
mean, sd = (b+a)/2, ((b-a)**2)/12 # мат.ожидание и дисперсия
n = 0
delta = 0
x_min, x_max = 0, 0
grafic = np.zeros(10)
M = []
D = []
N = []
while min(grafic) < 1000:
n += 1
x = random.uniform(0.0, 1.0)
alph = x * (b-a) + a
mass.append(alph)
P = (n - sum(grafic)) / n # вероятность попадания случайной величины за границы данного интервала
if len(mass) >= 2:
if P >= 0.01: # Пересчет всех Ni
grafic = [0] * 10
x_min = np.amin(mass)
x_max = np.amax(mass)
delta = (x_max - x_min) / 10
for i in mass: # подсчет количества вхождений элементов в интервалы
k = floor((i - x_min)/delta)
if k == 10:
k = 9
if 9 >= k >= 0:
grafic[k] += 1
print(grafic)
else: # нахождение номера интервала последнего сгенерированного числа в массиве
k = floor((mass[-1] - x_min) / delta)
if k == 10:
k = 9
if 9 >= k >= 0:
grafic[k] += 1
print(grafic)
if n % 100 == 0:
M.append(np.mean(mass)) # мат ожидание на каждом сотом шаге
D.append(np.var(mass)) # дисперсия на каждом сотом шаге
N.append(n) # количество элементов
print('Количество чисел:', n)
print('Количество вхождений в интервалы', grafic)
print('Минимальное число:', x_min, 'Максимальное число:', x_max)
print('Время работы программы:', time.time() - start_time)
x = [] # значения интервалов (по середине)
y = [] # кол-во попаданий в эти интервалы
x.append(x_min + delta/2)
for i in range(9):
x.append(x[i] + delta)
for i in range(0, 10):
y.append(grafic[i] / ((n)*delta))
print(x)
print(y)
# график гистограммы и плотности распределения
plt.xlabel('Интервалы')
plt.ylabel('Количество вхождений в интервалы')
line = np.linspace(x_min, x_max, 100)
plt.plot(line, uniform.pdf(line, loc=a, scale=b-a), lw=5, alpha=0.6, color='r')
plt.bar(x, y, width=delta)
plt.title('Гистограмма сформированной выборки')
plt.show()
# график мат ожидания
x = np.arange(0, len(N), 1)
plt.figure(3)
plt.plot(x, M)
plt.plot(range(0, len(x)), [mean for i in range(0, len(x))])
plt.title("Мат ожидание")
plt.xlabel('размер выборки')
plt.ylabel('мат. ожидание')
plt.show()
# график дисперсии
plt.figure(4)
plt.plot(x, D)
plt.plot(range(0, len(x)), [sd for i in range(0, len(x))])
plt.title("Дисперсия")
plt.xlabel('размер выборки')
plt.ylabel('дисперсия')
plt.show()
main()
Соседние файлы в папке ЛР 2