Viimeksi kuluneiden runsaan 30:n vuoden kuluessa yhtenä intohimonani on ollut matemaattisten ohjelmistojen ja korkean tason kielien tarjoamien mahdollisuuksien kokeilu ja kehittäminen matematiikan opetuksessa ja tutkimuksessa. Nykyisin aihe on taas erityisen ajankohtainen etenkin koulumaailmassa, jossa ohjelmointia ollaan kovalla ryminällä tuomassa opetukseen mukaan.
Tässä "Mattie-esittelyä" varten tekemäni kooste.
Siinä palautetaan mieleen symbolilaskennan ja numeeristen ohjelmistojen historiaa, ja mukana on laaja linkkilista omiin kursimateriaaleihini vuosien varrelta.
Nostan tässä aikajanani alkupisteeksi esiin kauan ennen Internet-aikoja Helsingin yliopiston matematiikan laitoksella aloittamaamme seminaariin liittyvän näytteen, joka toimitettiin tuonaikaisella viestintäohjelmalla nimeltään Portacom.
https://math.aalto.fi/opetus/Mattie/Blogi/HYseminaari83-84.pdf
Aloitan nyt taas Matlab:sta,
samasta ohjelmasta, josta silloin syksyllä 1983 niinikään aloitettiin!! Toden totta, näissä IT-alan myrskyissä on jotain näin pysyvää. Toki ohjelmassa on tapahtunut valtavasti kehitystä noista alkuajoista, mutta perusrakenteet ja ajattelutapa ovat samat kuin silloin. Matlab on tänään mitä ajankohtaisin matemaattinen ohjelma ja korkean tason ohjelmointikieli, jolla on erittäin laaja käyttäjäkunta.
Toinen pääkohde on symbolilaskentaohjelma
Maple. Maplen kanssa tasavertainen ohjelma on
Mathematica, jonka käsittelyn jätän mahdollisten muiden blogikirjotteluuni osallistuvien henkilöiden varaan. "Vierailukirjoittajiksi" ovat alustavasti lupautuneet ainakin Aalto-yliopiston yhteistyökumppanini
Juha Kuortti ja
Pekka Alestalo .
Eräs intohimoni on näiden vuosien aikana ollut numeerisen korkean tason kielen (kuten Matlab, APL) ja symbolilaskentakielen sopiva yhdistäminen ongelmia ratkottaessa. Tähän on nyt erillisten ohjelmien "seurustelun" lisäksi tarjolla Matlab:n "symbolic toolbox", jota ohjelman valmistaja Mathworks on viime vuosina tuntuvasti kehittänyt. Mainittu intohimo näkyy "Symbolinen ja numeerinen laskenta"-nimisinä erikoiskursseina, joiden materiaaleihin on linkkejä yllä. Tämä on yksi "toolbox", jota takuuvarmasti tullaan käsittelemään blogeissamme.
Mattie - matematiikkaa tietokoneella
Jarmo Malisen aloitteesta ryhdyimme Eerikki Lehtisen ja Juha Kuortin kanssa rakentamaan Aalto yliopiston matematiikan laitoksella tehtäväportaalia, johon oli määrä kerätä ja edelleen kehittää tehtäviä, ohjeita, opetusmateriaalia, ratkaisuja ym. matematiikan tietokoneharjoitusten tarpeisiin ennen kaikkea sen materiaalin pohjalta, jota oli tällaisia kokeiluja harrastaneiden opettajien toimesta kehittynyt. Simo Kivelältä saatiin alkajaisiksi huomattava määrä käyttövalmiita Mathematica-tehtäviä. Jatkossa painopiste on ollut Matlab- ja Maple-tehtävillä, koska näihin liittyvää materiaalia on itselleni kertynyt eniten.
Teknisestä toteutuksesta tässä senverran, että tehtävien näkyvillä oleva lähdekoodi on LATEX:ia, opettaja voi ottaa suoraan tehtävän, ja muokata sitä tarpeen mukaan. Tehtäviä voi selata html-sivulla, jossa matemaattiset kaavat näytetään MathJax:llä: https://www.mathjax.org/ , aivan kuten tässäkin blogissa teemme. (Edellyttää parin "loitsun" kirjoittamista blogin html-koodin alkuun.)
Näytteeksi vaikka eksponenttifunktion sarjakehitelmä:
ex=∞∑k=0xkk!=1+x+x22!+…
Matkan varrella on syntynyt lukuisa määrä oppimateriaalia, kuten Maple-oppikirja, monia Matlab-verkkomateriaaleja, ohjelmistoja hyödyntävää luentomateriaalia, hienoja oppilastöitä niin peruskursseihin kuin erikoiskursseihin liittyen.
Näitä nostamme esiin tämän alkavan "blogimatkan" varrella, "jalostamme" sekä ajanmukaistamme. Samalla täydennämme MattieT - osiota uusilla tehtävillä. Joukkoon sijoitamme myös ns. demotehtäviä, joiden ratkaisut näkyvät kaikille, korjaamme virheitä, ja pyrimme parantamaan käytettävyyttä palautteen mukaan.
Tätä kirjoittaessa syntyi ajatus luokitella tehtäviä myös sen mukaan, soveltuuko tämä matematiikan tason perusteella koulumaailmaan. Niinpä osassa tehtäviä kuvaavaa luetteloa on attribuutti: "KOULU":
https://math.aalto.fi/opetus/Mattie/MattieT/html/contentsmlBasic.html
Näitä tulee eri aihepiirien sisällysluetteloihin, kunhan ehtii.
Blogin pyrkimyksiä
Blogi voisi toimia myös eräänlaisena
etäopiskelukurssina täydentäen ja laajentaen edellä mainittuja lyhytkursseja, joissa jouduimme ajoittain juoksemaan asioita läpi liian vauhdikkaasti vähäisen tuntimäärän vuoksi.
Pyrimme myös tarjoamaan yhtä näkökulmaa
koulujen koodausbuumiin esittelemällä
ohjelmoinnin ja matematiikan rinnakkaiseloa tehtävillä, joissa koulumatematiikan pohja riittää.
Aloitamme alkeista, annamme runsaasti viitteitä omatoimiseen opiskeluun, sekä tehtäväehdotelmia, joiden ratkaisut laitamme aikanaan näkyville.
Blogi ei pyri olemaan johdonmukainen opasmateriaali, saatamme hyppiä aiheesta, vaikeusasteesta ja ohjelmasta toiseen. Pyrkimys on joka tapauksessa myös ohjata itseopiskelun polulla. Toisaalta tyypillisiä kirjoituksia voivat olla jotkut kekseliäät ratkaisut, ajattelutavat, tekniset ratkaisut, ohjelmistojen uudet piirteet, "toolboxit", ohjelmisovalmistajien omista blogeista esiin nostetut ideat, uusien ohjelmistoversioiden tarjoamat tekniikat, mahdollisuudet ovat miltei rajattomat.
Osa blogiteksteistä on tarkoitus kirjoittaa englanniksi, aluksi ainakin niin, että ensin suomeksi, ja sitten sama tai vastaava käännettynä englanniksi, katsotaan, mihin kaikkeen resurssit riittävät.
Matlab:n perusteita, osa 1
Miten pääsen ohjelman ääreen
Aalto-yliopistossa sekä henkilökunta että oppilaat saavat Matlab:n omalle koneelleen ohjelmistojakelusta. Opiskelijoille ja oppilaitoksille on saatavissa/neuvoteltavissa edullisia lisenssejä. Sama pätee muihinkin tässä blogissa käsiteltävin ohjelmiin.
Lisäksi saatavilla on ilmaiset "kloonit", jotka voi ladata linkeistä
https://math.aalto.fi/opetus/Mattie/MattieO/octave.html
https://math.aalto.fi/opetus/Mattie/MattieO/scilab.html
Matlabin
hieno editori julkaisuominaisuuksineen, monet toolboxit, ym. eivät ole
näillä klooneilla käytettävissä, mutta huomattava määrä
Matlab-työskentelyn perusteista toimii samalla tavoin, joten opetteluun
ne sopivat vallan hyvin.
Mistä aloitan
MattieO:n Matlab-sivulla on kattava kokoelma viitteitä
https://math.aalto.fi/opetus/Mattie/MattieO/matlab.html
Erittäin suositeltava suomenkielinen opas on Timo Mäkelän
https://sites.google.com/site/laskenta/matlab
(Samalta tekijältä on myös hyvä Maple-opas.)
Itselläni on erinäisiä html-tekstejä, ne ovat sikäli käteviä tässä yhteydessä, että voin antaa täsmälinkkejä haluamiini kohtiin ja työstää tekstejä lennossa paremmiksi (tai huonommiksi) .
https://math.aalto.fi/~apiola/matlab/opas/mini/Index.html
https://math.aalto.fi/~apiola/matlab/opas/lyhyt/
https://math.aalto.fi/~apiola/matlab/opas/mini/tutoriaali.html
Jos pidät video-opetuksesta, voit kokeilla videotutoriaaleja sivulta:
http://se.mathworks.com/academia/student_center/tutorials/launchpad.html
Suositeltavia tässä vaiheessa: (1) Getting started, (2) Writing a Matlab program
Parasta tietysti jälleen, jos Matlab/Octave on samalla auki. Muita videoita ja koodiesimerkkejä on samalla sivulla.
Videoita
löytyy Google-haulla suoraan Youtubesta. Seuraavassa on samoja asioita
työskentelytyylistä ja m-tiedostoista (skriptit ja funktiot) hiukan eri
esimerkein.
https://www.youtube.com/watch?v=NPd13u4i6fM
Eräs tapa aloittaa, on
käydä läpi kevään 2014 kurssille
tekemäni ensimmäisen luennon (Beamer)kalvot:
https://math.aalto.fi/opetus/MatOhjelmistot/2014kevat/L/MatlabPerusteet1.pdf
Niissä on mukana myös
relevantteja linkkejä.
Lyhyen pohjatiedon hankkimisen jälkeen, vaikkapa viimemainittujen luentokalvojen tai joidenkin muiden yllä olevien viitteiden perusteella voit käydä esimerkkeihin käsiksi. Parasta on tietenkin jälleen, jos käsillä on Matlab tai Octave (tai Scilab), jolloin voit tehdä sopivia omia muunnelmia.
Matlab-komennot on talletettu tekstitiedostoon, ns. m-tiedostoon, tässä tapauksessa
https://math.aalto.fi/opetus/Mattie/Blogi/Matlab/ExpTaylor.m
Tämä tiedosto on ajettu Matlab:n publish-komennolla (klikkauksella) tiedostoksi
https://math.aalto.fi/opetus/Mattie/Blogi/Matlab/html/ExpTaylor.html ,
joka samalla näyttää, miten Matlab-työstä saa kauniin html-dokumentin kuvineen. Poimin komennot kuvineen tähän suoraankin, ettei jää pelkän klikkailun varaan. Tämä on samalla blogialustan käyttökokeilua, miten Matlab-julkaisuvälineet ja blogialusta saataisiin parhaiten yhteistyöhön.
Sopivia komentokokonaisuuksia voit suoraan kopioida ("copy/paste") ohjelman komentoikkunaan tai omaan m-tiedostoosi.
Esimerkki 1
Exponenttifunktion Taylorin polynomeja
Matlabin publish-työkalun generoimassa (kauniimmassa) muodossa tässä:
https://math.aalto.fi/opetus/Mattie/Blogi/Matlab/html/ExpTaylor.html
Kuten yllä jo muistutettiin, sarjakehitelmä on tällainen:
ex=∞∑k=0xkk!
Matlab-istunto:
close all
x = [-2:.01:2];
y = exp(x);
Lasketaan Taylorin polynomien arvoja x-pisteissä
p0 = ones(size(x));
p1 = p0 + x;
p2 = p1 + (x.^2)/2;
p3 = p2 + (x.^3)/6;
Piirretään kaikki samaan kuvaan
plot(x,y)
hold on % Seuraavat samaan kuvaan pyyhkimättä vanhaa.
plot(x,p0)
plot(x,p1)
plot(x,p2)
plot(x,p3)
grid on
legend('e^x','p0','p1','p2','p3','Location','NW')
shg
Entä, jos halutaan laskea ja piirtää korkeamman asteisia?
Otetaan käyttöön for-silmukka, tehdään alusta saakka:
p{1}=ones(size(x));
N=10;
for k=1:N
p{k+1}=p{k}+(x.^(k))/factorial(k);
end
%%
hold off
plot(x,y,'r--',x,p{3},'g',x,p{5},'b',x,p{9},'k')
hold on
plot(x,y,'r--','LineWidth',2)
grid on
title('e^x ja parillisia Taylorin polynomeja')
legend('e^x','T_2','T_4','T_8','Location','NW')
shg
Approksimointivirhe
figure
plot(x,y-p{9})
title('Virhe: e^x - T_8(x)')
grid on
shg
Ja lasketaan maksimivirhe:
maksvirhe=max(abs(y-p{9}))
maksvirhe =
0.0018
Jospa nyt maltan lopettaa tällä kertaa tähän.
Lisää esimerkkejä ja tehtäväehdotuksia seuraavalla kerralla.