Sovellus: Suorakulmiomenetelmiä

91 days ago by Lauri_Ruotsalainen

Lauri Ruotsalainen, 2011
Sage-ohjelmisto matematiikan opetuksessa
 

 

Numeerinen integrointi suorakulmiomenetelmien avulla

Suorakulmiomenetelmissä integrointivälin osaväleille sovitetaan suorakulmioita, joiden pinta-alojen yhteissummasta saadaan approksimaatio määrätylle integraalille. Yksinkertaisin tapa on valita suorakulmion korkeudeksi funktion arvo osavälin keskipisteessä. Merkitään välien keskipisteitä x_1,\; x_2,\; ...,\; x_n. Kun osavälit oletetaan yhtä pitkiksi, funktion f kuvaajan ja x-akselin välillä [a, b] rajaaman alueen pinta-ala on likimäärin

h f(x_1) + h f(x_2) + ... + h f(x_n) = h\cdot\left[f(x_1) + f(x_2) + ... + f(x_n)\right],
missä h on osavälin pituus. Muita tapoja määrittää suorakulmioiden korkeus on valita välin suurin tai pienin arvo (niin sanotut ylä- ja alasummat) tai osavälin vasemman tai oikean reunan arvo.

Seuraavan ohjelman avulla voidaan graafisesti tarkastella suorakulmiomenetelmän toimintaa. Käyttäjän valittavana on funktio, integrointiväli, osavälien määrä ja sääntö, jonka perusteella suorakulmion korkeus määrätään osavälillä. Ohjelma piirtää funktion kuvaajan ja suorakulmiot valitun säännön mukaisesti. Kuvaajan alla esitetään laskulausekkein miten menetelmässä määrätyn integraalin arvo arvioidaan painotetun summan avulla. Sovellus laskee myös Sagen oman kehittyneen numeerisen integrointimetodin avulla mahdollisimman hyvän likiarvon määrätylle integraalille. Näin käyttäjä voi verrata suorakulmiomenetelmän avulla laskettua arvoa tarkkaan arvoon. Lisäksi ohjelmalla voidaan tutkia Riemannin integraalin määritelmään liittyvien ala- ja yläsummien käyttäytymistä, kun osavälien määrää kasvatetaan.

Kuva:


# Sovellus: Suorakulmiomenetelmät # Lauri Ruotsalainen, 2011 (perustuu sovellukseen "Numerical integrals with various rules" by Marshall Hampton and Nick Alexander) maarityspiste_saannot = ( ("vasen reuna", lambda f, i, h, a: a + i*h), ("oikea reuna", lambda f, i, h, a: a + i*h + h), ("keskipiste", lambda f, i, h, a: a + i*h + h/2), ("välin pienin arvo", lambda f, i, h, a: find_minimum_on_interval(f, a + i*h, a + i*h + h)[1]), ("välin suurin arvo", lambda f, i, h, a: find_maximum_on_interval(f, a + i*h, a + i*h + h)[1]) ) maarityspiste_nimet = [r[0] for r in maarityspiste_saannot] maarityspiste_saannot = dict(maarityspiste_saannot) @interact def _(f = input_box(default = x^2-5*x + 10), n = slider(1, 100, 1, 5), vali = input_box(default=(0, 10), label="Integrointiväli"), maarityspiste = selector(maarityspiste_nimet, nrows=1, label="Määrityspiste osavälillä")): xs = []; ys = [] h = (vali[1]-vali[0])/n f(x) = f maarityspiste_funktio = maarityspiste_saannot[maarityspiste] # Piirretään suorakulmiot määrityspistesäännön mukaisesti suorakulmiot = Graphics() for i in range(n): xi = maarityspiste_funktio(f, i, h, vali[0]) yi = f(xi) xi0 = vali[0] + i*h suorakulmiot += line([[xi0, 0], [xi0, yi], [xi0 + h, yi], [xi0 + h, 0], [xi0, 0]], rgbcolor=(1, 0, 0)) suorakulmiot += point((xi, yi), rgbcolor=(1,0,0)) xs.append(xi) ys.append(yi) show(plot(f, vali[0], vali[1]) + suorakulmiot, xmin = vali[0], xmax = vali[1]) # Lasketaan määrätyn integraalin approksimaatio suorakulmiomenetelmän ja Sagen tarkan numeerisen metodin avulla approksimaatio = h * sum([ys[i] for i in range(n)]) numeerinen_arvo = integral_numerical(f, vali[0], vali[1])[0] # Tulostetaan laskulausekkeet summa_sijoitus_html = "h \cdot \\left[ %s \\right]" %(join(["f(%s)"% N(i, digits=5) for i in xs]," + ")) summa_arvot_html = "%s \cdot \\left[ %s \\right]" %(h, join(["%s"% N(i, digits=5) for i in ys]," + ")) html(r''' <div class="math"> \begin{align*} \int_{%s}^{%s} {f(x) \, dx} & = %s \\\ \\\ \sum_{i=1}^{%s} {f(x_i) \, \Delta x} & = %s \\\ & = %s \\\ & = %s \end{align*} </div> ''' % (vali[0], vali[1], N(numeerinen_arvo, digits=7), n, 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