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

ЛР2_ИМ

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

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

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

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

КАФЕДРА № 41

ЛАБОРАТОРНАЯ РАБОТА

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

РУКОВОДИТЕЛЬ

ассистент

М.Н. Шелест

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

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

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

ОТЧЁТ О ЛАБОРАТОРНОЙ РАБОТЕ №2

Датчики случайных чисел. Построение гистограмм.

по курсу: ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ

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

СТУДЕНТ ГР. №

4616

А.В. Павлов

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

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

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

2019

Цель работы.

Изучение алгоритмов получения на ЭВМ чисел с заданным законом распределения и построения гистограмм.

Вариант задания.

Вариант №7.

Экспоненциальное распределение, = 2

Полученное соотношение из экспоненциального распределения.

Рисунок 1 – Экспоненциальное распределение

Листинг 1 – Код программы

import matplotlib.pyplot as plt

import numpy as np

import scipy.stats as st

#Функция создающая случайные числа

def random(lamb,N):

alpha = [] #Список сгенерированных чисел

for i in range(0,N):

R = np.random.uniform(0,1)

alpha.append((-1/lamb)*(np.log(R)))

return alpha

def main():

dat_list = [] # Массив со всеми сгенерированными значениями

lamb = 2 #параметр для распределение

step = 100 #шаг

Y, mu, D = [], [], [] # Вектор У, для построение гист выборки, МО, дисперсии

check = False #Проверка на остановку программы

cycle = 1 # количество итераций

while check == False:

dat_list = dat_list + (random(lamb, step))#Добавляем числа сгенерированных данных в общий список

if cycle == 1 or P >= 0.01: #Проверка на изменение x макс и x мин, дельту

x_min = min(dat_list) #Находим минимальный элемент

x_max = max(dat_list) #Находим максимальный элемент

delta = (x_max - x_min) / 10 #Расчет дельты

cycle += 1

#Считаем интервалы и кол. Попаданий в них

intervals, count = slicearray(dat_list, delta, x_min, x_max)

#Считаем P

P = (len(dat_list) - sum(count)) / len(dat_list)

#Проверка на условие - кол. попаданий > 100

cnt = 0

for i in count:

if i>=100:#Проверка на минимальное попадание в интервал

cnt +=1

if cnt==10:

check = True

#Считаем вектор Y по формуле,

for x in range(len(count)):

Y.append(count[x] / (len(dat_list) * delta))

#Рисуем график

plot(Y, weight, count,mu,D, intervals[:-1:],intervals)

#Считаем МО и Дисперсию

mu.append(np.mean(dat_list))

D.append(np.var(dat_list))

def plot(Y,wight,count,mu,D,intervals,exp):

x = np.arange(0, len(D), 1) #Генерируем список из кол. элементов

print((intervals)) #Вывод интервалов

print((count)) #Вывод кол. попаданий

xx = np.linspace(min(exp), max(exp), 100) #Генерируем список из кол. элементов

#Рисуем гистограмму выборки

plt.plot(xx, (st.expon.pdf(xx, loc=0, scale=0.5)),color='red')

plt.bar(intervals,Y,width=wight,align='edge')

plt.title("Гистограмма выборки")

#Рисуем график МО

plt.figure(3)

plt.plot(x, mu)

plt.title("Мат ожидание")

# Рисуем график дисперсии

plt.figure(4)

plt.plot(x, D)

plt.title("Дисперсия")

plt.show()

#Функция для разбивки списка на интервалы и подсчета кол. попаданий

def slicearray(array,delta,x_min,x_max):

interval=[] #список интервалов

count = [] #список кол. попаданий

#заполняем список интервалов

for x in range (0,11):

interval.append(x_min + delta * x)

for y in range(0,10):

summ = 0

for data in array:

if y != 10:

if interval[y] <= data < interval[y+1]: #Проверяем входит ли этот элемент в этот интервал

summ += 1

else:

if interval[9] < data <= interval[10]:

summ += 1

count.append(summ)

return interval, count

main()

Табличное представление распределение элементов выборки по квантам гистограммы.

Номер интервала

1

2

3

4

5

6

7

8

9

10

Число элементов, попавших в данный интервал

25608

14023

7755

4256

2301

1318

697

427

237

100

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

Рисунок 1 –Гистограмма выборки

Рисунок 3 – Математическое ожидание

Рисунок 4 - Дисперсия

Выводы.

В ходе данной лабораторной работы мы создали свой датчик случайных чисел с экспоненциальном законом распределением. На основе сгенерированных чисел, нарисовали гистограмму выборки, а так же рассчитали математическое ожидание и дисперсию на каждом этапе генерации. Таким образом на графике видно, что с увеличением выборки наш датчик случайных чисел приближается к истинным значениям экспоненциального распределения. Так например дисперсия в самом большой сгенерированной выборке равна 0.252, а истинное значение 0.25. Мат. Ожидание равно 0.502, а истинное значение 0.5

Соседние файлы в предмете Имитационное моделирование систем