Прямоугольники и трапеции

⏱ 40 мин · 🧩 заданий: 8

Зачем считать приближённо

  • Первообразная не элементарна: \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).

Прямоугольники

\text{левые:}\; h\sum_{k=0}^{n-1}f_k, \qquad \text{правые:}\; h\sum_{k=1}^{n}f_k, \qquad \text{средние:}\; h\sum_{k=0}^{n-1}f\left(x_k + \tfrac h2\right).

Трапеции

Соединяем соседние точки графика отрезками; площадь трапеции h\frac{f_{k} + f_{k+1}}{2}. Складывая:

T_n = h\left(\frac{f_0 + f_n}{2} + f_1 + f_2 + \dots + f_{n-1}\right).

Это среднее левой и правой сумм.

Погрешности

Для дважды дифференцируемой функции:

Метод Погрешность Порядок
левые / правые прямоугольники \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

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Ввод формулы

Формула трапеций для \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).
Задание 2 Ввод формулы

Средние прямоугольники для \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 Ввод формулы

Трапеции для \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).
Задание 4 Ввод формулы

Ошибка метода трапеций пропорциональна 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).
Задание 5 Ввод формулы

Оценка погрешности трапеций: |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).
Задание 6 Один вариант ответа

Для какой функции формула трапеций даёт точный ответ при любом n?

Задание 7 Один вариант ответа

Функция выпукла вниз (f'' > 0). Что можно сказать о методе трапеций?

Задание 8 Программа на Python

Составные формулы. Напишите функции 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

Войдите, чтобы отмечать пройденные уроки.