Matlab-perusteet Jukka Jauhiainen OAMK / Tekniikan yksikkö Hyvinvointiteknologian koulutusohjelma Tämän materiaalin tarkoitus on antaa opiskelijalle lyhyehkö johdanto Matlabohjelmiston perusteisiin. Matlabin opiskeluun käytössä oleva tuntimäärä on hyvin rajallinen, joten tästä materiaalista on pyritty tekemään sellainen, että perusteet voi opiskella itsenäisestikin. Tarkoitus on keskittyä sellaisiin asioihin, joihin opiskelujen varrella monesti törmää. Moniin matemaattisiin ongelmiin Matlab on varsin hyödyllinen työkalu. Sen takia sen käyttöä opiskellaan Signaaliteorian kurssilla. Ohjelman käynnistäminen Nämä ohjeet pätevät Tekniikan yksikön verkosta käynnistyvään Matlab6p5-versioon. Ohjelmaa voi ajaa suoraan verkosta ilman minkäänlaisia asennuksia paikallisille koneille, joten se toimii (ainakin periaatteessa) missä tahansa Tekniikan yksikön verkkoon kytketystä koneesta. Verkosta saattaa löytyä vanhempiakin versioita (kuten esim. Matlab6p), mutta ne eivät toimi! Todennäköistä on, että Matlab ei löydy Windowsin START-valikosta tai työpöydältä. Yleensä se on käynnistettävä Windows Explorerin kautta klikkaamalla Tools -> Map Network Drive. Folderiksi valitaan \\s\apps\kotka\matlab6p5
Kyseisestä hakemistosta löytyy ikoni, jota tuplaklikkaamalla ohjelma käynnistyy. Joskus ohjelma ei käynnisty, vaan ruutuun ilmestyy "Licence Manager Error". Tässä tilanteessa ota yhteys ATK-tukeen (ensisijaisesti Pekka Hämäläinen). Käynnistyminen saattaa kestää verkon yli jonkin aikaa, joten ole kärsivällinen. Niin kauan kuin vasemmanpuoleisessa ikkunassa on teksti "initializing", on lataus käynnissä. Käyttöliittymä Käynnistyksen jälkeen käytössä on kolme ikkunaa, joihin osaan voi valita eri toimintoja. Tärkein ikkuna on komentoikkuna (Command Window). Sinne käyttäjä voi kirjoittaa haluamiaan komentoja. Oheisessa esimerkissä on lisäksi Workspaceikkuna, jossa näkyy sillä hetkellä käytössä olevat muuttujat. Muuttujaa tuplaklikkaamalla saa näyttöön Excel-tyylisen taulukon, jossa näkyy muuttujan arvot. Kolmas esimerkin ikkuna on Command History, jossa näkyy lista edellisistä komennoista. Ne voi toistaa tuplaklikillä. Myös unix-maailmasta tuttu nuoli ylös/alas toimii komentoikkunassa. Muitakin ikkunoita on, ne on valittavissa yläpalkin viewnapin takaa. Yksittäisten komentojen lisäksi on mahdollista kirjoittaa hyvinkin monimutkaisia komentosarjoja tiedostoihin (ns. M-tiedostot). Näin tehtyjä uusia funktioita voidaan käyttää kuin mitä tahansa Matlabin sisäänrakennettuja valmisfunktioita.
Yleistä Nimi "matlab" tulee sanoista Matrix Laboratory. Matlab on siis suunniteltu ensisijaisesti matriisilaskentaan. Tämän ei pidä antaa pelottaa vaikka matriisin käsite olisikin päässyt unohtumaan. Vektorihan on yksiulotteinen (eli 1xn tai nx1) matriisi. Yksittäinen luku (eli skalaari) voidaan ajatella 1x1-matriisiksi. Esimerkiksi 3x3- matriisi on joukko lukuja, jotka on järjestetty 3 riviksi ja 3 sarakkeeksi. Matlab on tulkkaava ohjelmointikieli, eli se lukee rivi riviltä käyttäjän antamat komennot ja suorittaa niitä sitä mukaa. Virhetilanteessa ohjelman suoritus keskeytyy virheilmoitukseen. Tulkkavuudesta johtuu, että ohjelmien suoritus on hidasta verrattuna "oikeisiin" kääntäviin ohjelmointikieliin (esim. C).. Matlabin suosio perustuu pitkälti siihen, että siihen on saatavissa lukuisa laajennusosia, Toolboxeja, joiden ansiosta kaikkea ei tarvitse koodata itse alusta asti. Toolboxeja on saatavissa mm. signaalinkäsittelyyn, kuvankäsittelyyn, optimointiin, systeemisuunnitteluun jne. Niitä tulee myös koko ajan lisää. Tehtävä: Käy ohjelman tekijän MathWorks Inc:n kotisivulla. Kokeile kirjoittaa komentoriville komentoja help, helpwin, info ja demo. Tehtävä: Mitä komennot whos, cd, pwd ja clear tekevät?
Muutamia perusjuttuja Muuttujat ja peruslaskutoimitukset Määrittele muuttujat a ja b, anna niille vaikkapa arvot 1 ja 2 ja kokeile peruslaskutoimituksia niillä: >>a+b >>a-b >>a*b >>a/b >>a\b >>a^b Rivin lopussa oleva puolipiste (;) estää tulostuksen näytölle. Tämä voi olla tarpeen jos tulostusta on paljon. Huomaa, että koska Matlab on suunniteltu matriisilaskentaan, on jakolasku hieman mutkikkaampi kuin tavallisissa ohjelmointikielissä. Miten edellä operaatioiden a/b ja a\b tulos on selitettävissä? Kompleksiluvut Sitten hieman kompleksilukuja. Määrittele luku z=1-2i ja selvitä, miten saat kompleksiluvun reaali- ja imaginääriosan, itseisarvon ja vaihekulman. Yksiulotteiset vektorit Vektori on taulukko, jossa on lukuja peräkkäin. Matlabissa taulukkojen indeksointi alkaa aina YKKÖSESTÄ, ei nollasta kuten esimerkiksi C:ssä. Vektori voidaan määritellä komennolla: >>x=[eka:askel:vika]; missä eka on vektorin ensimmäinen alkio, askel sanoo paljonko arvoa kasvatetaan ja vika on viimeinen alkio. Askeleen voi jättää pois, jolloin oletus on 1. Vektorin tiettyyn alkioon viitataan antamalla vektorin nimi ja sen perään suluissa numero, joka kertoo, monenteenko alkioon viitataan. Siis >>x(n) Tulostaa vektorin x n:nnen alkion. Kaksoispisteen avulla voidaan määritellä tulostettavaksi joukko peräkkäisiä alkioita: >>x(n1:n2) Tulostaa vektorin sisällön alkaen indeksistä n1 ja päättyen indeksiin n2. Esimerkki: Tehdään vektori x, joka saa arvot 0:sta 10:een 0.1 välein. >>x=[0:0.1:10]; x:n sisäl lön voi tarkistaa kirjoittamalla komentoikkunaan x, tai tuplaklikkaamalla sitä Workspacessa (sen pitäisi ilmestyä sinne tuon komennon jälkeen). Tulostetaan seuraavaksi x:n 1. alkio:
>>x(1) 0 Ellei jonkin operaation tulosta sijoiteta johonkin muuttujaan, Matlab sijoittaa sen automaattisesti muuttujaan ans. Se siis sisältää aina viimeisimmän laskutoimituksen tuloksen. Vastaavasti komento >>a=x(1) sijoittaa x:n ensimmäisen alkion arvon muuttujaan a (joka ilmestyy Workspaceen). Katsotaan seuraavaksi, mitä x:n 10 ensimmäistä alkiota ovat: >>x(1:10) Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 10 0.7000 0.8000 0.9000 Vektorin alkioihin voidaan myös sijoittaa arvoja. Esimerkiksi tässä asetetaan vektorin x 10 ensimmäiseen alkioon 0: >>x(1:10)=0; Pysty- ja vaakavektorit Matlabissa vektori voidaan esittää joko pysty- tai vaakavektorina. Oletusarvona Matlab tekee vaakavektorin. Sen voi muuttaa pystyvektoriksi eli transponoida komennolla x : >> x=[1:3] x = 1 2 3 >> x' 1 2 3 Tehtävä: Tee vektori x, joka sisältää kokonaisluvut 1-5 ja vektori y, joka sisältää luvut 6 10. Kokeile yhteen-, vähennys, kerto- ja jakolaskuja. Mitä tapahtui?
Summa ja erotus on määritelty matemaattisesti vektoreille siten, että operaatio kohdistuu vektorien vastinalkioihin. Sen sijaan tulon ja osamäärän tapauksessa Matlab pyrkii laskemaan aina matriisitulon. Tehtävä: Selitä, mitä seuraavat operaatiot tekevät: x*y x *y Vastinalkioiden kerto- ja jakolasku on toki myös mahdollista. Se määritellään laittamalla operaattorin eteen PISTE. Siis esumerkiksi x.*y. Tehtävä: Laske vektorien x ja y alkioittainen tulo ja osamäärä. Matriisit Matriisi on kaksiulotteinen taulukko (vektori). Matriisin alkiot annetaan hakasulkujen sisällä rivi kerrallaan puolipisteillä erotettuna. Esimerkki: a=[1 2 3; 4 5 6; 7 8 9] a = 1 2 3 4 5 6 7 8 9 >> a' 1 4 7 2 5 8 3 6 9 Matriisin transponointi siis kääntää rivit sarakkeiksi ja päinvastoin. Peruslaskutoimituksiin matriiseilla pätee samat periaatteet kuin edellä vektoreihin. Summa ja erotus on siten määritelty vain kahden samankokoisen matriisin kesken. Matriisin a käänteismatriisi voidaan laskea komennolla inv(a). Tehtävä: Käytä edellä määriteltyä matriisia a. Tee myös vaakavektori b, joka sisältää luvut 1, 2 ja 3. Mitä laskutoimituksia a:n ja b:n välillä voi tehdä? Tehtävä: Matlabissa on valmiina joukko komentoja, joilla voidaan tehdä tiettyjä erikoismatriiseja. Tällaisia on esimerkiksi ones(n), zeros(n), eye(n), magic(n) jne. Mitä nämä komennot tekevät? Kirjaimen n tilalla on oltava positiivinen kokonaisluku.
Tehtävä: TST:ssä käytettiin tasavirtapiirien yhteydessä paljon silmukkamenetelmää, jossa tuntemattomat silmukkavirrat saatiin matriisiyhtälöstä 1 I = R ε. Ratkaise oheisen kytkennän silmukkavirrat Matlabia käyttäen: 10Ω A 20Ω 100V 10Ω 40V B