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


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)
S_left = h * np.sum(f(x_left))

# 2. Прямоугольники правые (назад)
x_right = np.arange(a + h, b + h/10, h)   # до b включительно
S_right = h * np.sum(f(x_right))

# 3. Прямоугольники средние
x_mid = np.arange(a + h/2, b, h)
S_mid = h * np.sum(f(x_mid))

# 4. Трапеции (ручная)
x_trap = np.arange(a, b, h)
S_trap = 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
S_simp = h/6 * (f(a) + f(b) + 2*np.sum(f(x_even)) + 4*np.sum(f(x_mid_simp)))

# --- Встроенные решатели ---
x_all = np.linspace(a, b, n+1)
y_all = f(x_all)

S_trapz = trapezoid(y_all, x_all)          # или np.trapz
S_simpson = simpson(y_all, x=x_all)
S_quad, _ = quad(f, a, b)

# Вывод
print("Интеграл ∫_{0.5}^{1.5} 6x / √(0.1x²+1.8) dx")
print(f"1. Левые прямоугольники:   {S_left:.8f}")
print(f"2. Правые прямоугольники:  {S_right:.8f}")
print(f"3. Средние прямоугольники: {S_mid:.8f}")
print(f"4. Трапеции (ручной):      {S_trap:.8f}")
print(f"5. Симпсон (ручной):       {S_simp:.8f}")
print(f"6. scipy.trapezoid:        {S_trapz:.8f}")
print(f"7. scipy.simpson:          {S_simpson:.8f}")
print(f"8. scipy.quad:             {S_quad:.8f}")

# График
x_plot = np.linspace(a, b, 200)
y_plot = f(x_plot)
plt.plot(x_plot, y_plot, 'b-', linewidth=2)
plt.fill_between(x_plot, y_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()