Лаба 1 / Отчет_лаба1
.docxГУАП
КАФЕДРА ПИ
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
ст. преподаватель |
|
|
|
М. Н. Шелест |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 1 |
ВЫЧИСЛЕНИЕ ОПРЕДЕЛЁННЫХ ИНТЕГРАЛОВ МЕТОДОМ МОНТЕ-КАРЛО |
по курсу: Имитационное моделирование |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
|
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2023
Цель работы
Изучение метода Монте-Карло, определение точности вычисления определённых интегралов методом Монте-Карло.
Исходная функция
Вариант №21
График результирующей функции
В начале выполнения данной лабораторной работы необходимо представить график исходной кусочной функции. На рисунке 1 представлен данный график.
Рисунок 1 – График исходной функции
Аналитический расчет величины F
Далее необходимо аналитически вычислить значение определённого интеграла от исходной функции. Поскольку данная функция является кусочной, то интеграл будет высчитываться как сумма из трёх интегралов.
Описание разработанной программы
В данной части отчета необходимо представить описание разработанного алгоритма для поиска приблизительного значения интеграла при помощи вычислений с повышенной точностью. Сперва, в таблице 1 представлены список используемых переменных, а на рисунке 2 – блок-схема алгоритма. Также, в листинге 1 представлен программный код разработанной программы.
Таблица 1. Список использованных переменных
Имя переменной |
Тип |
Описание |
random_nums |
Массив чисел |
Равномерные случайные числа |
mask1 |
Булевый массив |
Маска для заполнения массива для чисел < 1 |
mask2 |
Булевый массив |
Маска для заполнения массива для чисел [1; 2] |
mask3 |
Булевый массив |
Маска для заполнения массива для чисел > 2 |
y_arr |
Массив чисел |
Результаты вычисления функции для случ. Чисел |
pred_F |
Дробное число |
Подсчитанное значение интеграла |
Рисунок 2 – Блок-схема программы
Листинг 1. Алгоритм Монте-Карло
def create_y(N) -> float: random_nums = np.random.uniform(low, high, int(N)) mask1 = random_nums < 1 mask2 = (random_nums >= 1) & (random_nums <= 2) mask3 = random_nums > 2
y_arr = np.zeros_like(random_nums) y_arr[mask1] = 2 * f1(random_nums[mask1]) y_arr[mask2] = 2 * f2(random_nums[mask2] - 1) y_arr[mask3] = 2 * f2(random_nums[mask3] - 2)
pred_F = ((high - low) / N) * np.sum(y_arr) return pred_F
size = 2**14 pr_F = create_y(size) pr_F |
Табличное представление результатов моделирования
Затем, необходимо создать набор данных, который состоит из значений приблизительного значения интеграла в зависимости от количества случайных точек, распределённых равномерно. На рисунке 3 представлена полученная таблица из данных.
Рисунок 3 – Табличное представление моделирования
Графическое представление результатов моделирования
В качестве завершающего этапа данной лабораторной работы необходимо создать график по рассчитанной таблице. При этом ось абсцисс должна быть в логарифмическом масштабе по основанию 2. Также, на графике необходимо отметить уровнем величину F – аналитически рассчитанный интеграл. Таким образом, на рисунке 4 представлен полученный график.
Рисунок 4 – Графическое представление моделирования
Выводы
Таким образом, подводя итог ко всем выше проделанным операциям, можно сделать вывод о том, что вычисление интеграла методом Монте-Карло с повышенной точностью при достаточно большом количестве случайных значений практически приводит к истинному значению интеграла кусочной функции. Из этого следует, что чем больше число экспериментов, тем меньше погрешность оценки площади под функцией.