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

ЛР1_ИМ

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

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

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

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

КАФЕДРА № 41

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

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

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

ассистент

М.Н. Шелест

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

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

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

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

ВЫЧИСЛЕНИЕ ОПРЕДЕЛЁННЫХ ИНТЕГРАЛОВ МЕТОДОМ МОНТЕ-КАРЛО

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

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

СТУДЕНТ ГР. №

4616

А.В. Павлов

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

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

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

2019

Цель работы.

Изучение метода Монте-Карло. Определение точности вычисления определённых интегралов методом Монте-Карло.

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

Вариант №7.

Рисунок 1 – график функции fрез

Список использованных переменных:

Наименование переменной

Тип данных

Назначение

real

массив

Хранение истинного значения интеграла

emp

массив

Список интегралов полученных методом монте карло

rnd_number

массив

Список случайных чисел

x

массив

Список векторов 0.14

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

import matplotlib.pyplot as plt

import numpy as np

import scipy.stats as st

#Функция f1 из задания

def func1(t):

return 10 * (2 / (t+1))

#Функция f2 из задания

def func2(t):

return 5 * (2 / t)

#Функция f3 из задания

def func3(t):

return 2.5 * (2 / (t-1))

def main():

real =[] #Реальное подсчитанное значения интеграла

emp = [] #Значения подсчитанные с помощью метода монте карло

for n in range(0,15):

#Генерация рандомного списка

rnd_number = st.uniform.rvs(loc=0, scale=3, size=2 ** n)

for number in range(len(rnd_number)):

if rnd_number[number] < 1 : #Проверка на условия из задания

rnd_number[number] = func1(rnd_number[number]) #Меняем текущие значение из списка на подсчитанное с помощью функции

elif 1<= rnd_number[number] <= 2:

rnd_number[number] = func2(rnd_number[number])

else:

rnd_number[number] = func3(rnd_number[number])

emp.append((3 / len(rnd_number)) * sum(rnd_number)) #Добавлением значение подсчитанное с помощью формулы монте карло

real.append(24.26) #Добавленим реальное значение

print_result(n,emp)

plot(emp,real) #Рисуем графики

def print_result(n,emp):

result = 'Степень = {}, интеграл = {}'

print(result.format(str(n),str(emp[n]))) # Вывод результата

def plot(emp,real):

#Вывод графика Сравнение метода монте Карло и аналического расчета

plt.figure(1)

x = [i for i in range(0,15)]

plt.plot(x, emp, label="Метод Монте-Карло")

plt.plot(x, real,label="Аналитичиский расчет", lw = 4, color = 'red', alpha = 0.5 )

plt.title("Сравнение метода Монте-Карло с аналитичиским расчетом")

plt.xlabel("Степень")

plt.ylabel("Значение интеграла")

plt.legend()

plt.grid()

#Рисуем график результирующий функции

plt.figure(2)

plt.fill_between(np.arange(0, 1, 0.001), [func1(x) for x in np.arange(0, 1, 0.001)], color = 'red')

plt.fill_between(np.arange(1, 2.001, 0.001), [func2(x) for x in np.arange(1, 2.001, 0.001)], color = 'black')

plt.fill_between(np.arange(2.001, 3.001, 0.001), [func3(x) for x in np.arange(2.001, 3.001, 0.001)], color = 'blue')

plt.title("fрез")

plt.grid()

plt.show()

main()

Табличное представление результатов моделирования .

Количество экспериментов (Степень 2)

Оценка интеграла

0

32.88754291353669

1

13.727042337139656

2

29.52085937885841

3

31.039690389433837

4

23.58571286804264

5

24.66931992546377

6

21.467347708347884

7

24.301870818726254

8

25.131353567113408

9

23.9945143564691

10

25.37271127143026

11

24.478426627576326

12

24.15894018701584

13

24.350384743602454

14

24.323825239568144

График по рассчитанной таблице.

Рисунок 1 – График зависимости.

Выводы.

В ходе данной лабораторной работы мы изучили принципы реализации метода Монте-Карло, а так же написали программу в которой сравнили рассчитанные нами аналитическим путем данные с тем, что мы получили в результате работы нашей программы. Числа сошлись при увеличении выборки, что говорит нам о правильности работы нашей программы

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