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

1

.docx
Скачиваний:
45
Добавлен:
16.04.2021
Размер:
81.62 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ

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

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

ассистент

М.Н. Шелест

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

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

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

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

Вычисление определённых интегралов методом Монте-Карло

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

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

СТУДЕНТКА ГР.

4716

С.А. Янышева

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

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

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

2020

Лабораторная работа №1

Вычисление определённых интегралов методом Монте-Карло

  1. Цель работы

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

  1. Вариант № 20

№ варианта

a1

f1(t)

a2

f2(t)

a3

f3(t)

20

9

3

-27

2

-27

1

a1 = 9

a2 = -27

a3 = -27

f1 = 4t2 – 1

f2 = 2t – 1

f3 = sin (2πt) + 1

  1. Ход выполнения работы

    1. График результирующей функции

Рисунок 1 – График функции

    1. Аналитический расчет величины F

    1. Описание разработанной программы

      from matplotlib import pyplot as plt from scipy import integrate import numpy as np f1 = lambda x: 9*(4*x*x-1) f2 = lambda x: -27*(2*(x-1)-1) f3 = lambda x: -27*(np.sin(2*np.pi*(x-2))+1) #Теоретическое значение интеграла: true_val = integrate.quad(f1, 0, 1)[0] + integrate.quad(f2, 1, 2)[0] + integrate.quad(f3, 2, 3)[0] print('True value:', true_val) x1 = np.arange(0,1,0.001) x2 = np.arange(1,2,0.001) x3 = np.arange(2,3,0.001) plt.plot(x1,f1(x1), label = '9*(4*x*x-1)') plt.plot(x2,f2(x2), label = '-27*(2*(x-1)-1)') plt.plot(x3,f3(x3), label = '-27*(np.sin(2*np.pi*(x-2))+1)') plt.legend() plt.show() all_sc = [] # общее количество успешных событий для всех выборок for i in range(0,15): f_rez = [] for j in range (2**i): x = np.random.uniform(0, 3) if x<1: f_rez.append(f1(x)) elif 1<=x<2: f_rez.append(f2(x)) else: f_rez.append(f3(x)) all_sc.append(3*sum(f_rez)/2**i)

      [print('2^', i, ' tests - %.4f' % all_sc[i], sep='') for i in range(len(all_sc))] plt.plot(range(len(all_sc)), all_sc, label='experiment values') plt.plot(range(len(all_sc)), [true_val]*len(all_sc), color='red', label='true values') plt.xticks(range(len(all_sc)) ,[r'$2^{'+str(i)+'}$' for i in range(len(all_sc))]) plt.legend() plt.title("F'(N)") plt.show()

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

Таблица 1 – Результаты моделирования

Количество экспериментов

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

20

59.9227

21

-21.0496

22

-17.3547

23

-19.9985

24

-39.5632

25

-18.3447

26

-21.7528

27

-23.4380

28

-17.2127

29

-22.6618

210

-21.6006

211

-23.7273

212

-24.0188

213

-22.4920

214

-23.6739

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

Рисунок 2 – График зависимости оценки интеграла от количества экспериментов

  1. Выводы

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

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