Добавил:
egrpleh
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
from matplotlib import pyplot as plt
from scipy import integrate
import numpy as np
def ploting_rez_fun(f1, f2, f3):
'''Построение графика результирующей функции'''
# Генерация последовательности для x1, x2, x3
t1 = np.arange(0,1,0.001)
t2 = np.arange(1,2,0.001)
t3 = np.arange(2,3,0.001)
plt.plot(t1, f1(t1), label='f1(t1) = 7*(np.sin(2*np.pi*t)+1)')
plt.plot(t2, f2(t2), label='f2(t2) = -7*(4*(t-1)**2-1)')
plt.plot(t3, f3(t3), label='f3(t3) = -21*(np.sin(2*np.pi*(t-2))+1)')
plt.title("График результирующей функции")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()
def integrete_fun(f1, f2, f3):
'''Вычисление интеграла от результирующей функции'''
fr = integrate.quad(f1, 0, 1)[0] \
+ integrate.quad(f2, 1, 2)[0] \
+ integrate.quad(f3, 2, 3)[0]
print('Значение интеграла от результирующей функции:', fr)
return fr
def monte_carlo_integrate(f1, f2, f3):
'''Вычисление величины F методом Монте-Карло'''
# Оценка интеграла при N=2^i экспериментах, где i = (0,14)
rating = []
for i in range(0,15):
frez = []
for j in range(2**i):
# Задание x рандомнного значения от 0 до 3
x = np.random.uniform(0,3)
if x < 1:
# Передаем x лямбда функции f1
frez.append(f1(x))
elif 1 <= x <= 2:
# Передаем x лямбда функции f2
frez.append(f2(x))
else:
# Передаем x лямбда функции f3
frez.append(f3(x))
# Формула оценки определенного интеграла
rating.append(3 *sum(frez)/2**i)
for i in range(len(rating)):
print('2^', i, 'экспериментов\t-', rating[i])
return rating
def ploting_score_graph(rating, fr):
'''Построение графика зависимости оценки интеграла от количества экспериментов'''
plt.plot(range(len(rating)), rating, label='Оценка интегралла')
plt.plot(range(len(rating)), [fr]*len(rating)
,color='green', label='Значение результирующей функции')
plt.title("График зависимости оценки интеграла от количества экспериментов")
plt.xlabel("i")
plt.ylabel("f(x)")
plt.legend()
plt.show()
def main():
# Создание лямбда функции для f1(x), f2(x) и f3(x):
f1 = lambda t: 7 *( np.sin( 2*np.pi*t )+ 1 )
f2 = lambda t: -7 *( 4*(t-1)**2 - 1 )
f3 = lambda t: -21 *( np.sin( 2*np.pi*(t-2) )+ 1 )
# Построение графика результирующей функции
ploting_rez_fun(f1, f2, f3)
# Вычисление интеграла от результирующей функции
fr = integrete_fun(f1, f2, f3)
# Оценка интеграла при N=2^i экспериментах, где i = (0,14)
rating = monte_carlo_integrate(f1, f2, f3)
# Построение графика зависимости оценки интеграла от количества экспериментов
ploting_score_graph(rating, fr)
if __name__ == "__main__":
main()
Соседние файлы в папке ЛР1