Python linkit: Python tutoriaali: http://docs.python.org/2/tutorial/ Numpy&Scipy ohjeet: http://docs.scipy.org/doc/ Matlabin alkeet (Pääasiassa Deni Seitzin tekstiä) Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> 9.81 9.8100 Nyt meillä on käytössämme muuttuja a, jota voimme käyttää tulevaisuudessa laskuissamme. Esimerkiksi: >> a*10^2 981 Koska 1x1 vektorit ovat hieman tylsiä on syytä tutustua kuinka voimme kirjoittaa vaakavektoreita: >> [1,2,3] 1 2 3 (Myös [1 2 3] toimii samalla tavalla.) Vastaavasti pystyvektorit onnistuvat puolipisteillä: >> [1;2;3] 1 2 3 Yhdistämällä nämä, eli tekemällä pystyvektori jonka elementteinä on vaakavektoreita, saadaan matriiseja:
>> [1,2,3;2,3,4;4,5,6] 1 2 3 2 3 4 4 5 6 Matlabiin voi syöttää tietoa myös käyttäen graafista käyttöliittymää tai ladaten tietoja esimerkiksi excel-tiedostosta. Perusoperaatiot Meillä on matriiseille käytössä triviaalit perusoperaatiot +,-, ja *. Sen lisäksi matriisin kääntäminen onnistuu komennolla: >> [2,3;1,6] >> inv(a) 2 3 1 6 0.6667-0.3333-0.1111 0.2222 vaihtoehtoisesti voidaan käyttää myös merkintää: >> a^(-1) 0.6667-0.3333-0.1111 0.2222 vastaavasti voimme myös korottaa matrsiiseja potensseihin. Hyödyllinen on myös matriisin transpoosi, joka voidaan ilmaista seuraavasti: >> a'
2 1 3 6 Voimme myös operoida yksittäisiä matriisin alkioita: >> a.^(-1) 0.5000 0.3333 1.0000 0.1667 Nyt tässä. ennen operaattoria kertoo Matlabille, että suoritammekin operaation kaikkiin matriisin alkioihin emmekä laske käänteismatriisia. Sama toimii myös esimerkiksi kertolaskulla. Näppäriä komentoja Voimme luoda vektorin (1,2,3,...,n) seuraavalla komennolla: >> 1:10 1 2 3 4 5 6 7 8 9 10 Vastaavasti voimme luoda tietyllä lisäyksellä, tässä vaikkapa 0.1, vektorit jostain alkuarvosta lopetusarvoon: >> 1:0.1:2 Columns 1 through 7 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 Columns 8 through 11 1.7000 1.8000 1.9000 2.0000 Tämä on erittäin näppärää esimerkiksi funktioita piirrettäessä. Toinen hyvin hyödyllinen matlabtoiminto on puolipiste: >> 1:0.1:2; >>
Puolipiste estää matlabia tulostamasta operaatioiden vastauksia. Tämä on esimerkiksi erityisen hyödyllistä silloin kun meillä on suuri joukko operaatiota suoritettavanamme ja olemme kiinnostuneet vain viimeisen lausekkeen tuloksesta. Matriisin a arvo kohdassa (5,6) voidaan laskea komennolla: >> a(5,6) Vastaavasti voimme päivittää matriisiin arvon kohdassa (5,6): >> a(5,6) = 10 Graafien piirtäminen Matlabilla piirtäminen: >> -pi:0.1:pi; Nyt vektorissa a on tallennettu arvot (-3.14..;-3,04..;...3.04..;3.14). Sijoitetaan tämä funktioon: >> b = sin(a); eli laskemme sinin kaikille a vektorissa oleville arvoille ja tallennamme sen muuttujaan b. Nyt voimme piirtää tämän sinifunktion approksimaation: >> plot(a,b) Harjoitustehtäviä 1 5 1. Laske matlabilla 3+ 4 5 4 7 666 2. Tallenna luku 578 muuttujaan b. Laske b 2 b. 3. Luo matriisi A=[ 1 2 3 4]. Laske A+ A, A 2, det A, A 1 4. Luo funktio f ( x )=2 x 2 5. Laske f(2). [luo komennolla inline] 5. Piirrä edellisen tehtävän funktion kuvaaja välillä [-2, 3]. versio 1: laske funktion arvot vain kokonaislukujen kohdalla versio 2: laske funktion arvot 0,1 välein.
M-filen kirjoittaminen Usein joudumme laskemaan samoja laskuja toistuvasti. Laskumme toki tallentuvat komentohistoriaan, mutta komentohistorian käyttö on epäkäytännöllistä. Lisäksi komentohistoriaan ei voi lisätä ajatuksia kommenttimuodossa. Näiden ongelmien ratkaisemiseksi matlabissa on m-file, joihin voi tallentaa komentoja myöhemmin suoritettavaksi. Komento: >> edit omalasku.m avaa editoriin tiedoston omalasku.m, jos tiedostoa ei ole olemassa matlab luo sen. Komentojen kirjoittaminen etenee tutulla tavalla, missä yksi rivi vastaa yhtä matlab-komentoa. Ainoa merkittävä ero lienee mahdollisuus lisätä komentojen sekaan kommentteja. Kommentit aloitetaan %-merkillä. Hyvään tapaan kuuluu, että jokaisen tiedoston alkuun tarinoidaan kommenteilla tiedoston toiminta ja ominaisuudet. Kun olemme valmiita komennot voidaan ajaa komennolla: >> omalasku Oman funktion tekeminen m-tiedostona. Kirjoita m-tiedoston omalasku.m ensimmäiselle riville function tulos = omalasku(a, b, c) Tämä antaa käyttäjälle mahdollisuuden syöttää luvut a, b ja c, jotka ovat käytössä funktion sisäisinä muuttujina. (Eli niihin tallennetut arvot eivät ole käytössä funktion ulkopuolella.) Ohjelma palauttaa vastaukseksi muuttujan tulos arvon, joka lasketaan funktion sisällä. Se tallentuu muuttujaksi ans. Esimerkkiohjelma (tämän voi kopioida suoraan omaan m-tiedostoon pohjaksi): function tulos = omalasku(a, b, c) % Tämä ohjelma laskee käyttäjän syöttämien lukujen a, b ja c summan. tulos = a + b + c; Käyttö näyttää tältä: >> omalasku(3, 4, 5) 12
Suositus: tee kaikista m-tiedostoistasi funktioita, jollei ole hyvää syytä tehdä toisin. Harjoitustehtäviä 2 1. Kirjoita m-tiedosto, joka luo vektorin (5,2,3) ja tallentaa a:n ensimmäisen ja viimeisen alkion tulon muuttujaksi b. 2. Kirjoita m-tiedostona funktio, jonka syötteenä on kolme kokonaislukua ja tulosteena niiden käänteislukujen summa. 3. Kirjoita m-tiedosto, joka piirtää funktion f(x) = 1-x^2 välillä [-2,3], ja antaa kuvaajalle otsikon. 4. Kirjoita funktio, jonka syötteenä on kaksi lukua ja tulosteena luvuista suurempi. [if] 5. Kirjoita funktio, joka laskee summan 1 1 1 + +... + 2 2 2 1 2 n. [for] 6. Kirjoita funktio, joka etsii pienimmän kokonaisluvun n, jolle n 5 9 + n + 14 > 10 [while] 7. Kirjoita funktio, joka laske n. Fibonaccin luvun (n siis käyttäjän syöttämä). Harjoitustehtäviä 3 1. Selvitä tapa kirjoittaa matriisi, jonka diagonaalilla on ykkösiä ja mutu alkiot ovat nollia. (Vinkki: Katso komennot diag ja ones matlabin help -komennolla) 2. Laske lukujen 3 ja 5 monikertojen summa tuhanteen asti. Eli laske summa 3+5+6+9+10+12+15+ +1000. 3. Tutustu plot komentoon tarkemmin jollain itse valitsemallasi funktiolla. Kirjoita käyttämäsi komennot m-fileen. Tutustu komentoon hold 4. Kirjoita m-file, joka ratkaisee toisen asteen yhtälön tutulla ratkaisukaavalla. 5. Kirjoita m-file, joka ratkaisee toisen asteen yhtälön numeerisesti järkevällä tavalla. Kokeile arvoilla: a=1, b=2000000 ja c = -0,000015. 6. Kirjoita matriisilaskennan kurssilta tuttu pseudoinverssin kaava matlabilla. 7. Tutustu excel-tiedostoon kansiosta löytyvään excel-tiedostoon ja lataa se matlabiin 8. Sovita jokin lineaarinen malli ennustamaan ylläolevassa datassa onnettomuuksien määrää. Kaikkia data-sarakkeita ei tarvita. Kokeile ensin vaikka kahdella muuttujalla. 9. Project Euler tehtävä n
Vinkkejä harjoitustehtäviin 3: 2. Summafunktio. Laske erikseen 3 ja 5. Muista poistaa mahdolliset yhteiset monikerrat! 3. help -komento 4. 5. Funktio sign(x) antaa luvun x merkin. Ts. voit ratkaista: x0 = -0,5/a*(b+sign(b)*sqrt(d)). Mieti miksi! Kirjoita nyt ratkaisu siten, että ratkaisukaavan osoittajassa olevat summattavat ovat merkiltään samoja. Ratkaise nyt toinen juuri tiedoista: a*(x0+x1) = -b ja c=a*x0*x1 välttäen vähennyslaskuja (kahden erimerkkisen summaa). 6. Wikipedia tai matriisilaskennan pruju 7. Muuttujaikkunasta löytyy import toiminto. Voit myös käyttää a(2,:) komentoa poimimaan tietyn rivin. 8. Ks. matriisilaskennan pruju Matlab-klooneja Parhaiten tunnettu matlab klooni on ehdottomasti Octave, johon löytyy runsaasti laajennusosia. Graafisesta ympäristöä ja helppokäyttöisyyttä arvostaville Octave voi olla hieman haastava. Olen käyttänyt FreeMAT nimistä ohjelmaa, jonka graafinen käyttöliittymä on varsin mukava ja yhteensopivuus matlabin kanssa hyvä.