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


import numpy as np

# функция
def f(x):
    return np.log(x) / x

# метод левых прямоугольников
def rectangles(a, b, n):
    h = (b - a) / n
    x = np.linspace(a, b - h, n)
    return h * np.sum(f(x))

# метод трапеций
def trapezoid(a, b, n):
    h = (b - a) / n
    x = np.linspace(a, b, n + 1)
    y = f(x)
    return h * (0.5*y[0] + np.sum(y[1:-1]) + 0.5*y[-1])

# метод Симпсона (n должно быть четным)
def simpson(a, b, n):
    if n % 2 != 0:
        raise ValueError("n должно быть четным для метода Симпсона")
    
    h = (b - a) / n
    x = np.linspace(a, b, n + 1)
    y = f(x)
    
    return h/3 * (y[0] + y[-1] +
                  4 * np.sum(y[1:-1:2]) +
                  2 * np.sum(y[2:-2:2]))

# параметры
a = 1
b = np.e

# сначала n = 4
n1 = 4
# потом n = 8
n2 = 8

print("n = 4")
print("Прямоугольники:", rectangles(a, b, n1))
print("Трапеции:", trapezoid(a, b, n1))
print("Симпсон:", simpson(a, b, n1))

print("\nn = 8")
print("Прямоугольники:", rectangles(a, b, n2))
print("Трапеции:", trapezoid(a, b, n2))
print("Симпсон:", simpson(a, b, n2))

# точное значение
exact = 0.5 * (np.log(b))**2 - 0.5 * (np.log(a))**2
print("\nТочное значение:", exact)