
Добавил:
toykion
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lab1
.pyimport matplotlib.pyplot as plt
import math
import random as rd
from scipy.integrate import quad
import pandas as pd
def plot_ft():
"""Построение графика функции F(t)"""
x=[0]
y=[]
while max(x)<=3:
if(max(x)<1):
y.append(round(16/(max(x)+1),2))
elif((max(x)>=1)and(max(x)<=2)):
y.append(round(8*math.sin(2*math.pi*(max(x)-1))+8,2))
elif(max(x)>2):
y.append(round(8-32*((max(x)-2)**2),2))
x.append(round(max(x)+0.1,2))
del x[-1]
plt.plot(x,y)
plt.title('Функция F(t)')
plt.xlabel('t')
plt.ylabel('F(t)')
plt.grid()
plt.show()
def analitic_integral():
"""Вычисление площади по интегралу аналитически"""
def integral1(t):
return 16/(t+1)
def integral2(t):
return 8*math.sin(2*math.pi*(t-1))+8
def integral3(t):
return 8-32*((t-2)**2)
return quad(integral1, 0, 1)[0] + quad(integral2, 1, 2)[0] + quad(integral3, 2, 3)[0]
def monte_karlo():
"""Вычисление площади по интегралу методом Монте-Карло"""
x_min=0
x_max=3
i_max=14
F=[]
# Итерация по i
for i in range(i_max+1):
N=2**i
a=0
# Итерация по количеству экспериментов
for _ in range(N-1):
rand_x=rd.uniform(x_min,x_max)
if rand_x<1:
a+=round(16/(rand_x+1),2)
elif rand_x>=1 and rand_x<=2:
a+=round(8*math.sin(2*math.pi*(rand_x-1))+8,2)
elif rand_x>2:
a+=round(8-32*((rand_x-2)**2),2)
# Запись результатов интегрирования
F.append((x_max-x_min)/N*a)
x=[]
y=[]
res_func = analitic_integral()
for i in range (i_max+1):
x.append(2**i)
y.append(res_func)
# Вывод результатов экспериментального моделирования
print(pd.DataFrame({'i для 2**i': list(range(0,i_max+1)), 'Оценка интеграла': F}))
# График, показывающий эффективность метода Монте-Карло по мере увеличения количества экспериментов
f, ax = plt.subplots(1)
ax.set_xscale('log', base=2)
ax.plot(x,F, label='Интеграл по Монте-Карло')
ax.plot(x,y, label='Интеграл аналитически')
ax.legend()
plt.title('Сравнение графиков F(t) и F^(N)')
plt.show()
plot_ft()
print('Аналитическое значение рез функции: ', analitic_integral())
monte_karlo()
Соседние файлы в предмете Имитационное моделирование