1
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
ассистент |
|
|
|
М.Н. Шелест |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1 |
Вычисление определённых интегралов методом Монте-Карло |
по курсу: ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ |
|
|
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. |
4716 |
|
|
|
С.А. Янышева |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург
2020
Лабораторная работа №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 – График функции
Аналитический расчет величины F
Описание разработанной программы
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()
Табличное представление результатов моделирования
Таблица 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 |
График по рассчитанной таблице
Рисунок 2 – График зависимости оценки интеграла от количества экспериментов
Выводы
В ходе данной лабораторной работы были изучены методы разные реализации метода Монте-Карло. Кроме того, для одной из них была разработана программа, осуществляющая оценку определённого интеграла данным методом. Также была выявлена закономерность уменьшения погрешности от увеличения объема выборки.