Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab2

.py
Скачиваний:
1
Добавлен:
27.08.2024
Размер:
3 Кб
Скачать
import random as rd
import matplotlib.pyplot as plt
import numpy as np

a, b = 2, 3

def rasp(N_max):
    arr = []
    x_min, x_max = 0, 0
    N_mass = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    N = 0
    delta = 0
    while min(N_mass) < N_max:
        N += 1
        arr.append(round(rd.random() * (b - a) + a, 2))
        if delta != 0:
            div = arr[-1] // delta
            mod = arr[-1] % delta
            for j in range(10):
                if (div == j and mod > 0) or (div == j + 1 and mod == 0):
                    N_mass[j] += 1
                    break
        P = (N - sum(N_mass)) / N
        if P >= 0.01 and len(arr) >= 2:
            x_min = min(arr)
            x_max = max(arr)
            delta = (x_max - x_min) / 10
            N_mass = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
            for i in range(len(arr)):
                div = (arr[i] - min(arr)) // delta
                mod = round((arr[i] - min(arr)) % delta, 2)
                for j in range(10):
                    if ((div == j and mod > 0) or (div == j + 1 and mod == 0)):
                        N_mass[j] += 1
                        break
    return [N_mass, arr, x_min, x_max, delta]


def hist(N_max):
    [N_mass, arr, x_min, x_max, delta] = rasp(N_max)
    N = sum(N_mass)
    print(N_mass)
    x = []
    y = []
    for i in range(10):
        x.append(round(delta * i, 2)+x_min)
        y.append(1 / (b - a))
        N_mass[i] = N_mass[i] / (N * delta)
    x = list(map(str, x))
    plt.plot(x, y, color='r')
    plt.bar(x, N_mass, width=1)
    plt.title('Гистограмма выборки')
    plt.xlabel('X')
    plt.ylabel('Ni')
    plt.show()


def static(N_min, N_max, step):
    m, M, d, D, x = [], [], [], [], []
    while N_min <= N_max:
        [N_mass, arr, x_min, x_max, delta] = rasp(N_min)
        N_min += step
        m.append((max(arr) + min(arr)) / 2)
        M.append((b + a) / 2)
        D.append(((b - a) ** 2) / 12)
        d.append(((max(arr) - min(arr)) ** 2) / 12)
        x.append(len(arr))
    plt.plot(x, m, x, M)
    plt.title('Мат ожидание')
    plt.xlabel('Размер выборки')
    plt.legend (('Рассчитанное значение', 'Теоретическое значение'))
    plt.show()
    plt.plot(x, d, x, D)
    plt.title('Дисперсия')
    plt.xlabel('Размер выборки')
    plt.legend (('Рассчитанное значение', 'Теоретическое значение'))
    plt.show()


hist(100)
static(10,100,5)
rasp(100)
Соседние файлы в предмете Имитационное моделирование