from math import log, pi, sin, cos
from random import uniform
while True:
print('Для выбора метода интегрирования введите требуемое число:')
print('1 - метод прямоугольников')
print('2 - метод трапеций')
print('3 - метод Симпсона')
m = int(input())
a = float(input('Введите нижний предел интегрирования a: '))
b = float(input('Введите верхний предел интегрирования b: '))
dx = float(input('Введите шаг интегрирования dx: '))
N = int(input('\nВведите количество точек N: '))
# нахождение интеграла численными методами
if m == 3: # метод Симпсона
if m == 1: # метод прямоугольников
s = 0 # интеграл
x = a
while x <= b:
f1 = cos(x) + sin(5 * x)
f2 = sin(x) + log(x)
y = f2 - f1
ds = y * dx
s += ds
x += dx
elif m == 2: # метод трапеций
s = 0 # интеграл
x = a
while x <= b:
x1 = x + dx
f1 = cos(x) + sin(5 * x)
f2 = sin(x) + log(x)
y1 = f2 - f1
f3 = cos(x1) + sin(5 * x1)
f4 = sin(x1) + log(x1)
y2 = f4 - f3
x += dx
s += (y1 + y2) / 2 * dx
# нахождение мин и макс значения y фигуры
min_y = cos(a) + sin(5 * a)
max_y = sin(a) + log(a)
x = a
while x <= b:
min_y = min(min_y, cos(x) + sin(5 * x))
max_y = max(max_y, sin(x) + log(x))
x += dx
a1 = max_y - min_y # высота фигуры
a2 = b - a # ширина фигуры
S0 = a1 * a2 # площадь фигуры
n = 0 # количество попавших точек
for _ in range(N):
x = uniform(a, b)
y = uniform(min_y, max_y)
f1 = cos(x) + sin(5 * x)
f2 = sin(x) + log(x)
if f1 <= y <= f2:
n += 1
Sm = S0 * n / N
print('\nРезультат:\n')
if m == 1:
print(f'Метод прямоугольников {s:g} ед. кв.')
else:
print(f'Метод трапеций {s:g} ед. кв.')
print(f'Метод Монте-Карло {Sm:g} ед.кв.\n')
print('----------------------------------------\n')