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)