Прямоугольники и трапеции
Зачем считать приближённо
- Первообразная не элементарна: \int_0^1e^{-x^2}dx, \int_0^\pi\frac{\sin x}{x}dx, длина эллипса.
- Функция задана таблицей измерений: скорость каждые 10 секунд, расход воды по часам.
- Первообразная есть, но очень громоздкая.
Все численные методы устроены одинаково: отрезок [a; b] делится на n частей шириной h = \frac{b - a}{n}, на каждой части функция заменяется простой (константой, прямой, параболой), а интеграл от простой функции считается точно.
Обозначим x_k = a + kh, f_k = f(x_k).
Прямоугольники
Трапеции
Соединяем соседние точки графика отрезками; площадь трапеции h\frac{f_{k} + f_{k+1}}{2}. Складывая:
Это среднее левой и правой сумм.
Погрешности
Для дважды дифференцируемой функции:
| Метод | Погрешность | Порядок |
|---|---|---|
| левые / правые прямоугольники | \left|R\right| \le \frac{(b - a)h}{2}\max|f'| | O(h) |
| средние прямоугольники | R = \frac{(b - a)h^2}{24}f''(\xi) | O(h^2) |
| трапеции | R = -\frac{(b - a)h^2}{12}f''(\xi) | O(h^2) |
Порядок — показатель степени h: при удвоении n ошибка метода первого порядка уменьшается вдвое, второго — вчетверо.
Почему средние прямоугольники точнее трапеций в 2 раза и с противоположным знаком? Разложим f по Тейлору около середины отрезка m: f(x) = f(m) + f'(m)(x - m) + \frac{f''(m)}{2}(x - m)^2 + \dots Линейное слагаемое интегрируется в ноль, а квадратичное даёт \frac{f''h^3}{24} — ошибку средних прямоугольников. У трапеций та же разность, но -\frac{f''h^3}{12}. Эта связь — ключ к формуле Симпсона в следующем уроке.
import numpy as np
import vis
f, a, b, exact = np.exp, 0.0, 1.0, np.e - 1
def rule(name, n):
h = (b - a) / n
x = a + h * np.arange(n + 1)
if name == "левые": return h * np.sum(f(x[:-1]))
if name == "средние": return h * np.sum(f(x[:-1] + h / 2))
return h * (np.sum(f(x)) - (f(a) + f(b)) / 2) # трапеции
ns = [2, 4, 8, 16, 32, 64, 128, 256]
errs = {name: [abs(rule(name, n) - exact) for n in ns] for name in ["левые", "средние", "трапеции"]}
vis.line(np.log2(ns), errs, logy=True, title="Ошибка в логарифмическом масштабе: наклон = порядок метода", xlabel="log₂ n")
for name, e in errs.items():
print(f"{name:9}: отношения ошибок при удвоении n:", np.round(np.array(e[:-1]) / np.array(e[1:]), 2))
Отношения близки к 2 у прямоугольников по краю и к 4 у средних прямоугольников и трапеций — так экспериментально определяют порядок метода.
Табличные данные
Если функция известна только в точках (например, измерения), подходит метод трапеций — он использует ровно значения в узлах. В NumPy: np.trapz(y, x) (узлы могут быть и неравномерными).
import numpy as np
t = np.array([0, 10, 20, 30, 40, 50, 60]) # время, с
v = np.array([0, 4.5, 9.8, 13.2, 15.1, 15.9, 16.2]) # скорость, м/с
print("путь за минуту ≈", np.trapz(v, t), "м")
print("средняя скорость ≈", round(float(np.trapz(v, t) / 60), 2), "м/с")
Итог
- Прямоугольники по краю — O(h), средние прямоугольники и трапеции — O(h^2).
- |R_{\text{трап}}| \le \frac{(b - a)h^2}{12}\max|f''|; средние прямоугольники вдвое точнее и с другим знаком ошибки.
- Порядок метода видно по наклону графика ошибки в логарифмическом масштабе.
Практика решено 0 из 8
Формула трапеций для \int_0^2 x^3\,dx при n = 2 (h = 1). Вычислите.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
5Средние прямоугольники для \int_0^2 x^3\,dx при n = 2.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
3.5Трапеции для \int_1^3 \frac{dx}{x} при n = 4 (h = 0{,}5). Введите до четырёх знаков.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
1.1167Ошибка метода трапеций пропорциональна h^2. Во сколько раз уменьшится ошибка при увеличении n с 10 до 40?
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
16Оценка погрешности трапеций: |R| \le \frac{(b - a)h^2}{12}\max|f''|. Для \int_0^1 e^{x}\,dx найдите наименьшее n, при котором оценка гарантирует |R| \le 10^{-4}.
Как вводить формулы
Степень —^ (x^2, e^(3x)), умножение можно не писать (2x, x sin(x)),
дробь — / (1/(x+1)), корень — sqrt(x), модуль — |x| или abs(x).
Функции: sin cos tg ctg arcsin arccos arctg arcctg sh ch ln lg exp, константы pi и e.
Аргументы функций лучше брать в скобки: sin(2x). Для неопределённого интеграла допишите + C.
Индексы пишутся слитно: m1, v0; греческие буквы — словом или символом: alpha или α.
Десятичная дробь — через точку или запятую, большие числа — через 10^: 6,67*10^(-11).
48Для какой функции формула трапеций даёт точный ответ при любом n?
Функция выпукла вниз (f'' > 0). Что можно сказать о методе трапеций?
Составные формулы. Напишите функции midpoint(f, a, b, n) и trapezoid(f, a, b, n) (составные формулы
средних прямоугольников и трапеций на n равных частях). Функция f принимает число.
Какие тесты проверяют код (1)
import math cube = lambda x: x**3 assert abs(trapezoid(cube, 0, 2, 2) - 5) < 1e-12 assert abs(midpoint(cube, 0, 2, 2) - 3.5) < 1e-12 assert abs(trapezoid(lambda x: 3 * x - 7, -1, 4, 3) - (-12.5)) < 1e-12, "Для линейной функции — точно" e1, e2 = abs(trapezoid(math.exp, 0, 1, 10) - (math.e - 1)), abs(trapezoid(math.exp, 0, 1, 20) - (math.e - 1)) assert 3.9 < e1 / e2 < 4.1, "При удвоении n ошибка трапеций уменьшается в 4 раза" assert abs(midpoint(math.sin, 0, math.pi, 100) - 2) < 1e-4
def midpoint(f, a, b, n):
h = (b - a) / n
return h * sum(f(a + (k + 0.5) * h) for k in range(n))
def trapezoid(f, a, b, n):
h = (b - a) / n
return h * ((f(a) + f(b)) / 2 + sum(f(a + k * h) for k in range(1, n)))
Войдите, чтобы отмечать пройденные уроки.