Laboratório de quadratura
Um notebook para executar e verificar a regra dos trapézios.
#Objetivo
Implemente a regra composta dos trapézios e verifique a convergência em um caso com solução conhecida. Você precisa de Python 3 e de noções de integrais e funções; este exemplo usa apenas a biblioteca padrão.
O notebook é fornecido sem execução e sem saídas salvas. Execute todas as células, de cima para baixo, em Jupyter. Os valores esperados descritos no texto são resultados analíticos, não registros de uma execução.
- Implemente o método.
- Compare com uma integral exata.
- Examine o efeito do refinamento.
- Resolva um exercício de verificação.
Consulte a derivação nas notas do curso.
def trapezoid(f, a, b, n):
if not isinstance(n, int) or isinstance(n, bool) or n < 1:
raise ValueError("n must be a positive integer")
h = (b - a) / n
interior = sum(f(a + i * h) for i in range(1, n))
return h * (0.5 * f(a) + interior + 0.5 * f(b))
#Comparação com uma solução exata
Para
Por exemplo, com quatro subintervalos esperamos
from math import isclose
for n in [1, 2, 4, 8, 16]:
approximation = trapezoid(lambda x: x * x, 0.0, 1.0, n)
error = approximation - 1.0 / 3.0
expected_error = 1.0 / (6 * n * n)
assert isclose(error, expected_error, rel_tol=1e-10, abs_tol=1e-15)
print(f"n={n:2d} T_n={approximation:.10f} error={error:.10f}")
#Refinamento
Calcule
errors = [
abs(trapezoid(lambda x: x * x, 0.0, 1.0, n) - 1.0 / 3.0)
for n in [1, 2, 4, 8, 16]
]
ratios = [coarse / fine for coarse, fine in zip(errors, errors[1:])]
print(ratios)
#Exercício
Troque o integrando por isclose para conferir o resultado.
# Complete este exercício antes de executar:
# result = trapezoid(...)
# assert isclose(result, 0.5)
#Limites e extensão
Para
Como extensão, integre exp e expm1 da biblioteca math. Depois volte ao índice de aulas.