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

ЛР 1 / ЛАБА_1

.pdf
Скачиваний:
0
Добавлен:
08.07.2024
Размер:
365.67 Кб
Скачать

Цель работы: Изучение метода Монте-Карло, определение точности вычисления определенных интегралов методом Монте-Карло.

Вариант №9.

Ход работы:

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

мую функцию в соответствии с вариантом.

1)1 = 10, 1( ) = +12 ; => 20+1

2)2 = −10, 2( ) = 4 2 − 1; => 10 − 40( − 1)2

3)3 = −30, 3( ) = sin(2 ) + 1; => −30 − 30 sin (2 ( − 2))

Далее вычисляю определенный интеграл. Проверка полученных значений с помо-

щью встроенных функций в соответствии с рисунком 1 (Листинг A).

Рисунок 1 – Вычисление определенного интеграла График полученной функции в соответствии с рисунком 2.

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

Разработка программы, вычисляющей величину F методом Монте-Карло при задан-

ном числе экспериментов в соответствии с рисунком 3 (Листинг A).

2

Рисунок 3 – Результаты разработки программы

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

Название

Тип переменной

Хранимое значение

 

 

 

all

float

Значение интеграла встроенной функции

 

 

 

x1, x2, x3

float

Случайные значения на заданном проме-

 

 

жутке

 

 

 

a, b, c

float

Значение интеграла на каждом промежутке

 

 

 

maccivmass

 

Массив значений для построения графика

 

 

функции

 

 

 

mas_x, mas_y

 

Массив значений кол-ва повторений и зна-

 

 

чений F

 

 

 

j, k

int

Счетчик цикла

 

 

 

x

float

Случайное значение в заданном проме-

 

 

жутке

 

 

 

count

float

Сумма значений от каждой функции

 

 

 

weight

int

Знак функции

 

 

 

n

int

Кол-во повторений цикла

 

 

 

integral_value

float

Значение интеграла сложной функции

 

 

 

График по табличному представлению результатов моделирования количества по-

вторений от значения F в соответствии с рисунком 4.

3

Рисунок 4 – Полученный график

Вывод:

В ходе работы я познакомилась с методом Монте-Карло, изучила метод для опреде-

ления точности вычисления определенных интегралов методом Монте-Карло, научилась проверять значения интегралов программным способом. По полученному графику я сде-

лала вывод о том, что между количеством повторений экспериментов и вычислением фак-

ториала сложной функции есть прямая зависимость.

4

Листинг А

from scipy import integrate from math import *

import numpy as np import random

import matplotlib.pyplot as plt

global all all = 0

def punkt1(): global all

def integrals1(t): return 20/(t+1)

def integrals2(t): return 10-40*(t-1)**2

def integrals3(t):

return -30*sin(2*pi*(t-2))-30

a = integrate.quad(lambda t: abs(integrals1(t)), 0, 1)[0] b = integrate.quad(lambda t: abs(integrals2(t)), 1, 2)[0] c = integrate.quad(lambda t: abs(integrals3(t)), 2, 3)[0] all = (a + b + c)

print('Значение интеграла встроенной функцией: ', all)

x1 = np.arange(0, 1, 0.001)

x2 = np.arange(1, 2, 0.001)

x3 = np.arange(2, 3, 0.001) alina = []

for i in x1: alina.append(integrals3(i))

plt.plot(x1, integrals1(x1), label='20/(t+1)') plt.plot(x2, integrals2(x2), label='10-40*(t-1)**2') plt.plot(x3, alina, label='-30*sin(2*pi*(t-2))-30') plt.xlabel('x')

plt.ylabel('y')

5

plt.legend()

plt.show()

return all

def monte_karlo(): mas_x = [] mas_y = []

for j in range(0, 15): n = 2 ** j

count = 0

for i in range(0, n):

t = random.uniform(0.0, 3.0) weight = 1

if t < 1:

count += abs(20/(t+1))

if 1 <= t <= 2:

count += abs(10-40*(t-1)**2)

if t > 2:

count += abs(-30*sin(2*pi*(t-2))-30)

if t < 1 or t > 2: weight = -weight

integral_value = (3.0/n) * count

print('При N =', n, 'значение F =', integral_value)

mas_x.append(n) mas_y.append(integral_value)

fig, ax = plt.subplots()

ax.hlines(all, -5, 10000, color = 'blue') plt.plot(mas_x, mas_y) plt.legend(['истинное значение F'])

6

plt.semilogx(basey=2)

ax.set_xlabel('N повторений') ax.set_ylabel('значение F') plt.show()

if __name__ == '__main__': punkt1() monte_karlo()

7

Соседние файлы в папке ЛР 1