# Sovellus: Puolisuunnikasmenetelmä
# Lauri Ruotsalainen, 2011 (perustuu sovellukseen "Numerical integrals with various rules" by Marshall Hampton and Nick Alexander)
@interact
def puolisuunnikas(f = input_box(default = x^2-5*x + 10, type=SR),
n = slider(1, 100, 1, 5),
vali = input_box(default=(0, 10), label ="Integrointiväli")):
xs = []
ys = []
h = (vali[1] - vali[0])/n
f(x) = f
puolisuunnikkaat = Graphics()
# Piirretään puolisuunnikkaat.
for i in range(n):
xi = vali[0] + i*h
yi = f(xi)
puolisuunnikkaat += 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))
# Esitetään funktion käyrä ja puolisuunnikkaat kuvaajassa.
show(plot(f, vali[0], vali[1]) + puolisuunnikkaat, xmin = vali[0], xmax = vali[1])
# Lasketaan määrätyn integraalin approksimaatio puolisuunnikasmenetelmän ja Sagen tarkan numeerisen metodin avulla.
numeerinen_arvo = integral_numerical(f, vali[0], vali[1])[0]
approksimaatio = h *(ys[0]/2 + sum([ys[i] for i in range(1,n)]) + ys[n]/2)
# Esitetään approksimaation laskemisen välivaiheet.
summa_kaava_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)
summa_sijoitus_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))
summa_arvot_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>
''' % (vali[0], vali[1], N(numeerinen_arvo, digits=7), vali[0], vali[1], summa_kaava_html, summa_sijoitus_html, summa_arvot_html, N(approksimaatio, digits=7)))
|
|
Click to the left again to hide and once more to show the dynamic interactive window
|