import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import trapezoid, simpson, quad
a, b = 0.5, 1.5
n = 10
h = (b - a) / n # 0.1
# Правильная функция
def f(x):
return 6 * x / np.sqrt(0.1 * x**2 + 1.8)
# 1. Левые прямоугольники
x_left = np.arange(a, b, h)
S1 = h * np.sum(f(x_left))
# 2. Правые прямоугольники
x_right = np.arange(a + h, b + h/10, h)
S2 = h * np.sum(f(x_right))
# 3. Средние прямоугольники
x_mid = np.arange(a + h/2, b, h)
S3 = h * np.sum(f(x_mid))
# 4. Трапеции (ручной)
x_trap = np.arange(a, b, h)
S4 = h * np.sum((f(x_trap) + f(x_trap + h)) / 2)
# 5. Симпсон (ручной)
x_even = np.arange(a + h, b, h) # для коэффициента 2
x_mid_simp = np.arange(a + h/2, b, h) # для коэффициента 4
S5 = h/6 * (f(a) + f(b) + 2*np.sum(f(x_even)) + 4*np.sum(f(x_mid_simp)))
# 6. Встроенный trapezoid
x_all = np.linspace(a, b, n+1)
y_all = f(x_all)
S6 = trapezoid(y_all, x_all)
# 7. Встроенный simpson
S7 = simpson(y_all, x=x_all)
# 8. quad
S8, _ = quad(f, a, b)
print("Интеграл ∫[0.5,1.5] 6x / √(0.1x²+1.8) dx")
print(f"1. Левые прямоугольники: {S1:.8f}")
print(f"2. Правые прямоугольники: {S2:.8f}")
print(f"3. Средние прямоугольники: {S3:.8f}")
print(f"4. Трапеции (ручной): {S4:.8f}")
print(f"5. Симпсон (ручной): {S5:.8f}")
print(f"6. scipy.trapezoid: {S6:.8f}")
print(f"7. scipy.simpson: {S7:.8f}")
print(f"8. scipy.quad: {S8:.8f}")
# График
x_plot = np.linspace(a, b, 200)
plt.plot(x_plot, f(x_plot), 'b-', linewidth=2)
plt.fill_between(x_plot, f(x_plot), alpha=0.2)
plt.title("f(x) = 6x / √(0.1x²+1.8)")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.grid(True)
plt.show()