Regla trapezoidal en pitón

Estoy tratando de implementar la regla trapezoidal en Python 2.7.2. He escrito la siguiente función:

def trapezoidal(f, a, b, n):
    h = float(b - a) / n
    s = 0.0
    s += h * f(a)
    for i in range(1, n):
        s += 2.0 * h * f(a + i*h)
    s += h * f(b)
    return s

Sin embargo, f (lambda x: x ** 2, 5, 10, 100) devuelve 583.333 (se supone que devuelve 291.667), así que claramente hay algo mal con mi script. Aunque no puedo verlo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta