# Trapezoid integration method (based on the application "Numerical integrals with various rules" by Marshall Hampton and Nick Alexander)
# Lauri Ruotsalainen, 2010
@interact
def trapezoid_int(
f = input_box(default = x^2-5*x + 10, type=SR),
n = slider(1,100,1,5),
interval = input_box(default=(0,10), label="Integral interval")
):
xs = []
ys = []
h = (interval[1]-interval[0])/n
f(x) = f
trapezoids = Graphics()
for i in range(n):
xi = interval[0] + i*h
yi = f(xi)
trapezoids += line([[xi, 0], [xi, yi], [xi + h, f(xi + h)],[xi + h, 0],[xi, 0]], rgbcolor = (1,0,0))
xs.append(xi)
ys.append(yi)
xs.append(xi + h)
ys.append(f(xi + h))
show(plot(f, interval[0], interval[1]) + trapezoids, xmin = interval[0], xmax = interval[1])
numeric_value = integral_numerical(f, interval[0], interval[1])[0]
approx = h *(ys[0]/2 + sum([ys[i] for i in range(1,n)]) + ys[n]/2)
sum_formula_html = "d \cdot \\left[\\frac{f(x_0)}{2} + %s + \\frac{f(x_{%s})}{2}\\right]" % (
join([ "f(x_{%s})"%i for i in range(1,n)], " + "),
n
)
sum_placement_html = "%s \cdot \\left[\\frac{f(%s)}{2} + %s + \\frac{f(%s)}{2}\\right]" % (
h,
N(xs[0], digits=5),
join([ "f(%s)" %N(i, digits=5) for i in xs[1:-1]]," + "),
N(xs[n], digits=5)
)
sum_values_html = "%s \cdot \\left[\\frac{%s}{2} + %s + \\frac{%s}{2}\\right]" % (
h,
N(ys[0], digits=5),
join([ "%s" % N(i, digits=5) for i in ys[1:-1]], " + "),
N(ys[n], digits=5)
)
html(r'''
<div class="math">
\begin{align*}
\int_{%s}^{%s} {f(x) \, dx} & = %s \\\
\\\
\int_{%s}^{%s} {f(x) \, dx}
& \approx %s \\\
& = %s \\\
& = %s \\\
& = %s
\end{align*}
</div>
''' % (
interval[0], interval[1],
N(numeric_value, digits=7),
interval[0], interval[1],
sum_formula_html, sum_placement_html, sum_values_html,
N(approx, digits=7)
))
|
|
Click to the left again to hide and once more to show the dynamic interactive window
|