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

Моделирование_Лаба_5

.docx
Скачиваний:
17
Добавлен:
18.12.2019
Размер:
554.24 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Ассистент

Иванова М.С

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №5

Критерии согласия

по курсу: Моделирование

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4616

А.В.Павлов

подпись, дата

инициалы, фамилия

Санкт-Петербург 2019

Цель работы:

Необходимо изучить критерии согласия Пирсона и Колмогорова – Смирнова и построить графики изменения количества ошибок от изменяемого параметра распределения.

Вариант №8.

Была смоделирована выборка из N= случайных величин с распределением Накагами, параметром глубины замираний m=1 и параметром, характеризующим среднюю мощность σ=3. Проверить данную выборку на соответствие с законом распределения

from scipy.stats import nakagami, chi2

import numpy as np

import matplotlib.pyplot as plt

import math

def cut(sample):

# правила Стерджеса

size = 1 + math.log2(len(sample))

step = math.floor(len(sample) / size)

return [sample[i:i + step] for i in range(0, len(sample), step)]

def Pearson_consent(s, size, nu):

error = 0

for j in range(100):

x = sorted(nakagami.rvs(nu, loc=0, scale=s, size=size))

data = cut(x)

hi_square = [] # Хи квадрат

for i in data:

# Вероятность попадания в интервал соответствующие теоретическому закону распределения

Pt = nakagami.cdf(i[-1], nu, loc=0, scale=1) - nakagami.cdf(i[0], nu, loc=0, scale=1)

Pe = 1 / len(i)

hi_square.append((Pe - Pt) ** 2 / Pt)

if sum(hi_square) >= chi2.ppf(1 - 0.05, 0.058):

error += 1

return error

def Kolmogorov_Smirnov_Criterion(s, size, nu):

error = 0

for j in range(100):

x = sorted(nakagami.rvs(nu, loc=0, scale=s, size=size))

Dp = max([(i + 1) / len(x) - nakagami.cdf(x[i], nu, loc=0, scale=1) for i in range(len(x))])

Dm = max([nakagami.cdf(x[i], nu, loc=0, scale=1) - i / len(x) for i in range(len(x))])

Dn = max(Dp, Dm)

K = math.sqrt(-1 / (2 * len(x)) * math.log(0.05 / 2))

if Dn > K:

error += 1

return error

def Ploting(N):

x = np.linspace(0.81, 1.11, N) # x - Список значения параметра

y, y1 = [], []

fig = plt.figure('Лабораторная работа №5 - Зависимость количества ошибок критериев от изменения глубины замирания')

plt.rcParams['font.size'] = 18

ax1 = fig.add_subplot(111)

for i in x:

y.append(Pearson_consent(i, size=100, nu=7) / 100) # size - количество случайных чисел, N

ax1.scatter(np.array(x) + 0.04, y, c='green', lw=2, label='Критрий согласия Пирсона')

x = np.linspace(0.9, 1.1, N) # x - Список значения параметра

for i in x:

y1.append(Kolmogorov_Smirnov_Criterion(i, size=100, nu=7) / 100) # size - количество случайных чисел, N

ax1.scatter(x, y1, c='blue', lw=2, label='Критерий согласия Колмогорова - Смирнова')

ax1.legend(loc=3, frameon=False)

ax1.grid(alpha=0.3, color='black')

ax1.set_title('Зависимость количества ошибок от изменения глубины замирания')

ax1.set_xlabel('Глубина замирания')

ax1.set_ylabel('Количество ошибок')

ax1.set_xlim(0.85, 1.15)

ax1.set_ylim(-0.01, 1.01)

plt.show()

if __name__ == '__main__':

Ploting(N=1000)

Полученные графики:

Рисунок 1 - Зависимость количество ошибок от изменения глубины замирания при испытаний

Рисунок 2 - Зависимость количество ошибок от изменения глубины замирания при испытаний

Вывод: В ходе лабораторной работы мы изучили критерии согласия Пирсона и Колмогорова, промоделировали нашу выборку у вывели полученный результат с помощью графиков.

5