import math def fpod (x): #значение подынтегральной функции F = 1 / x * math.log(x) return F def fperv (x): #значение первообразной подынтегральной функции F = math.log(math.log(x)) return F def metodtrap(N, a, b): # метод трапеций delx = (b - a) / N ind = a + delx sumfpod = 0 sumfperv = 0 while (ind < b): sumfpod += 2 * fpod(ind) sumfperv += 2 * fperv(ind) ind += delx sumfpod = ( sumfpod + fpod(a) + fpod(b) ) * delx / 2 sumfperv = ( sumfperv + fperv(a) + fperv(b) ) * delx / 2 print("Методом трапеции от подынтегральной функции: " + str(sumfpod)) print("Методом трапеции от первообразной подынтегральной функции: " + str(sumfperv)) return (sumfperv, sumfpod) def metodlevpr(N, a, b): #метод левых прямоугольников delx = (b - a) / N ind = a sumprperv = 0 sumprpod = 0 while (ind < b): sumprperv += fperv(ind) sumprpod += fpod(ind) ind += delx sumprperv = delx * sumprperv sumprpod = delx * sumprpod print("Методом левых прямоугольников от подынтегральной функции: " + str(sumprpod)) print("Методов левых прямоугольников от первообразной подынтегральной функции: " + str(sumprperv)) return (sumprperv, sumprpod) N = int(input("N: ")) a = int(input("a: ")) b = int(input("b: ")) trap = metodtrap(N, a, b) # кортеж (результат перв. подынт. функции, результат подынт. функции) pr = metodlevpr(N, a, b) # кортеж (результат перв. подынт. функции, результат подынт. функции) if (trap[0] < trap[1]): # нахождение абсолютной погрешности abs_pog_trap = trap[1] - trap[0] print("Абсолютная погрешность (метод трапеции): " + str(abs_pog_trap)) else: abs_pog_trap = trap[0] - trap[1] print("Абсолютная погрешность (метод трапеции): " + str(abs_pog_trap)) if (pr[0] < pr[1]): abs_pog_pr = pr[1] - pr[0] print("Абсолютная погрешность (метод л.прямоугольников): " + str(abs_pog_pr)) else: abs_pog_pr = pr[0] - pr[1] print("Абсолютная погрешность (метод л.прямоугольников): " + str(abs_pog_pr)) print("Относительная погрешность (метод трапеции): " + str(int(round(abs_pog_trap / trap[0], 2) * 100)) + "%") print("Относительная погрешность (метод л.прямоугольников): " + str(int(round(abs_pog_pr / pr[0], 2) * 100)) + "%")