Моделирование_Лаба_5
.docx
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА № 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 - Зависимость количество ошибок от изменения глубины замирания при испытаний
Вывод: В ходе лабораторной работы мы изучили критерии согласия Пирсона и Колмогорова, промоделировали нашу выборку у вывели полученный результат с помощью графиков.