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
https://math.aalto.fi/opetus/Mattie/
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 % Suljetaan mahd. avoinna olevat % grafiikkaikkunat x = [-2:.01:2]; % Diskreetti x-akselin väli y = exp(x); % exp-funktion arvot x-pisteissä
Lasketaan Taylorin polynomien arvoja x-pisteissä
p0 = ones(size(x)); % Ykkösistä koostuva vektori p1 = p0 + x; % Lisätään x-vektori p2 = p1 + (x.^2)/2; % Seuraava termi, huomaa .^ p3 = p2 + (x.^3)/6; % Ja vielä yksi.
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') % NW=North West shg % "Show Graphics" Ei välttämätön, mutta hyvä.
Entä, jos halutaan laskea ja piirtää korkeamman asteisia?
Otetaan käyttöön for-silmukka, tehdään alusta saakka:
p{1}=ones(size(x)); % Matlab ei salli 0-indeksiä. Huomaa aaltosulut {}. % p{k} voidaan ajatella indeksoituna (vektori)muuttujana. N=10; % Muuttele tarpeen mukaan for k=1:N p{k+1}=p{k}+(x.^(k))/factorial(k); end %%
hold off % Seuraavat piirtokomennot pyyhkivät edelliset piirrokset
% Valitaan värit: 'r' = red, 'g'=green, 'k'=black
plot(x,y,'r--',x,p{3},'g',x,p{5},'b',x,p{9},'k') % Parilliset polynomit hold on % Pidetään edelliset plot(x,y,'r--','LineWidth',2) % Punainen, paksumpi katkoviiva, jotta % erottuisi seuraavassa p{9}:n kuvaajasta. grid on title('e^x ja parillisia Taylorin polynomeja') legend('e^x','T_2','T_4','T_8','Location','NW') shg
% Zoomaamalla gragfiikkaikkunan suurennuslasilla, nähdään, missä vaiheessa % T_8 :n (eli p{9}:n) ja exp(x):n kuvaajat erkanevat. %
Approksimointivirhe
figure % Avataan uusi grafiikkaikkuna. plot(x,y-p{9}) % Piirretään erotus exp(x)-T8(x) title('Virhe: e^x - T_8(x)') grid on shg
Ja lasketaan maksimivirhe:
maksvirhe=max(abs(y-p{9}))
%
maksvirhe = 0.0018