Загрузка данных


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')