Laboratory of Computer and Information Science / Neural Networks Research Centre CIS Lab Helsinki University of Technology
[ Pääsivulle | How to start with Matlab in English ]

URL IN ENGLISH: http://www.cis.hut.fi/Opinnot/T-61.3010/how_to_start_with_matlab.shtml

SIVUN OSOITE: http://www.cis.hut.fi/Opinnot/T-61.3010/kuinka_aloitan_matlabin.shtml

versio 2008-01-17 FIN

SISÄLTÖ:

Kuinka aloitan työskentelyn Matlabilla

Ohjeet tehty Windowsia varten, unix/linux ohjeet vihreällä sekä erikseen muutamia eroja listattuna viimeisessä kappaleessa ennen esimerkkejä. Ympäristönä TKK, ohjeet päivitetty tammikuussa 2008, sovelluskohteena signaalinkäsittely (ääniominaisuudet!). Katso siis myös kurssin T-61.3010 Matlab-laskarit.

Matlabin avaamalla pääsee sen omiin tutoriaaleihin. Valitse Help - Matlab help tai komentoriviltä kirjoittamalla doc. Vasemman sarakkeen listasta voi valita "Getting Started"-osioista niin perus-Matlabin kuin kunkin toolboxin käyttöön. Dokumentaatio on runsasta ja sisältää myös "täysin teoria-ainestakin", joten itseopiskelu on miellyttävää.

Muita lähteitä itseopiskeluun ovat Säätömaation kurssi AS-74.1106 (katso kohta Aikataulu ja sieltä luentokalvot sekä tehtävät) ja siihen liittyvä Matlab-kirja (kirjakaupasta) sekä opas Heikki Apiolalta ja Marko Laineelta.

Englanniksi löytyy mm. Wikikirja Matlabin käyttöön (ei vielä kovin kattava toukokuussa 2008).

Aivan aluksi tämän kurssin ensimmäisellä harjoituskerralla

Matlab

Alkuasetukset Matlabissa joka istunnon aluksi

Jokaisen Matlab-istunnon lopuksi



Perustyöskentely Matlabissa

Työskentely Matlabin omalla editorilla

Miksi kannattaa kirjoittaa kaikki koodi Matlabin editoriin? Miten käytän Matlabin editoria?

Matlabin skriptit ja funktiot

Skriptit (eli makrot) ja funktiot ovat tekstitiedostoja, joiden pääte pitää olla ".m". Ne ovat hyvin samankaltaisia. Ensimmäinen ero on, että funktion pitää alkaa tietyllä rivillä ("function ..."). Toinen ero on se, että funktiolla on oma sisäinen muistiavaruus (johon viedään ja josta saadaan arvoja parametrien avulla), kun taas skripti toimii Matlabin "pääohjelman muistiavaruudessa" ("workspace").

Älä nimeä omaa funktiota tai skriptiä nimellä, joka on jo Matlabin käytössä, esim. fourier tai fft. Matlab etsii ensin komentoa työhakemistosta ja sitten muusta polusta.

Funktio

Hyvä tapa, kun pitää toistaa jotain asiaa usein. Funktio on ns. m-tiedosto, joka toteuttaa jonkun funktion:
  [                            |---------|                         ]
  [ argumentti/argumentit  --> | FUNKTIO | --> palautettava arvo/t ]
  [                            |---------|                         ]
Tiedosto alkaa rivillä
function [outputs] = fun_name(inputs)
missä varattu sana "function", hakasuluissa kaikki funktion palauttamat muuttujat pilkulla erotettuina, yhtäsuuruusmerkki, funktionnimi (sama kuin tiedostonnimi ilman .m) ja normaaleissa suluissa pilkulla erotettuina sisääntulevat muuttujat. Esimerkki 2 tämän sivun alareunassa.

Toisesta rivistä eteenpäin voi rivin aloitta prosenttimerkillä ja kertoa miten funktiota kutsutaan, mitä se tekee ja mitä se palauttaa. Kun tällöin komentorivillä etsii apua "help fun_name", niin näytölle tulostuvat rivit 2-N omine aputeksteineen. Katso esimerkkiä 2.

Ajetaan Matlabin komentoikkunasta tai skriptistä vastaavasti
[tyotilan_outputit] = fun_name(tyotilan_inputit);

Skripti

Ns. m-tiedosto, jossa komentoja rivi toisen jälkeen. Matlab lukee rivin, ajaa sen ja menee seuraavalla riville. Siksi puhutaan skriptistä tai makrosta tai batch-ajosta.

Tiedosto luodaan esimerkiksi Matlabin omalla editorilla tai millä tahansa tekstinkäsittelyohjelmalla, tallennetaan tekstimuodossa tiedostoksi file.m, jossa "file" on haluamasi, kuvaava tiedostonimi.

Ajetaan Matlabin komentoriviltä "file" ilman .m. Voidaan ajaa myös Matlabin editorista solu (=lohko) kerrallaan tai kaikki kerralla.

Hyvä tapa tallettaa koko työskentely. Esimerkki 3 tämän sivun alareunassa.

Funktioiden ja skriptien muistiavaruus

Funktiolla on oma muistiavaruus. Tarkastellaan esimerkkinä seuraavaa funktiota, joka palauttaa aina lukuarvon 99.
function [y] = dummy(x)
x = 0;
y = 99;
Jos komentoikkunassa tai erillisessä skriptissä ajetaan seuraavat rivit
x  = 42;
y  = dummy(x);
x
niin viimeisen rivin x:n arvo on edelleen 42 eli funktiossa oleva x on eri asia kuin työtilassa ("workspace") oleva x.

Toisaalta skriptien kanssa voi tulla ongelmia, jos ei muista, että muuttujat ovat yhteisiä. Komentoriviltä saattaa "kokeilla" joitakin eri muuttujan arvoja, eikä sitten skriptiä ajaessa muista, että muuttuja on päivitetty. Tällaisissa loogisissa virheissä usein auttaa se, että sanoo "clear all" joka poistaa kaikki työtilan muuttujat. Tämän jälkeen mahdollinen virheilmoitus on helppo tunnistaa.

Virheistä

Tyypillisiä virheilmoituksia

Virheilmoitukset tulevat punaisella värillä komentoikkunaan (Command window). Jos ajat koodia tiedostosta, niin mukana tulee myös rivinumero, jonka perusteella virheen voi paikallistaa.

Googlaa virheitä

Googlaus auttaa usein, koska 99.9999% todennäköisyydellä et ole ensimmäinen, joka on saanut vastaavan virheen toimiessaan Matlabilla (tai millä tahansa tietokoneohjelmalla tai ohjelmointikielellä).

Maalaa virheilmoitus ja googlaa sitä. Esimerkiksi ??? Index exceeds matrix dimensions palauttaa useimmiten relevantteja sivuja. Lisäksi jos kyseessä on oikeasti bugi, niin MathWorksin Support Center kertoo siitä (yleensä myös googlauksessa korkealla).

Muita yleisiä virheitä tai ongelmia



Ääniominaisuuksien testaaminen

Voit varmistaa, että äänet toimivat Matlabin kautta seuraavilla komennoilla:
load train     % lataa muuttujat y ja Fs Matlabin valmiista tiedostosta train.mat
soundsc(y, Fs) % pitäisi kuulua junapillin puhallus
Jos ääntä ei kuulu: Ääntä nauhoitettaessa:

Matlabin eroja Windowsissa ja Unixissa

Tässä kerättynä:

TKK:n Matlab-lisenssit ja Matlab omaksi?

Matlabin kotisivuilta löytyy kohta "Academic" ja sieltä tarjoukset, paljon Matlab maksaa kotikoneelle. Yleensä siellä on perus-Matlab ja sen päälle joku pieni kokoelma toolboxeja. Lisäksi Otaniemen kirjakaupassa näyttää olevan myynnissä Matlab-opiskelijalisenssipaketteja, joissa on mukana Signal Processing Toolbox (kevät 2008).

Osan Matlab-koodista voi onnistuneesti ajaa myös ilmaisessa Octavessa.

TKK:lla on Matlab-lisenssipalvelin, johon yksittäinen kone ottaa yhteyttä, kun Matlab avataan. TKK:lla on tietty määrä "kelluvia lisenssejä" perus-Matlabiin ja sen kaikkiin toolboxeihin (komento ver näyttää). Samoin kun Matlabin sisällä käytetään komentoja, jotka kuuluvat tiettyyn toolboxiin, niin lisenssi varataan kyseisen toolboxin osalta. Lisenssi vapautetaan tietyn ajan (tunteja ilman käyttöä) jälkeen tai kun käyttäjä lopettaa Matlabin käytön itse.

Signal Processing Toolboxiin TKK:lla on 150 lisenssiä, jotka yleensä riittävät jopa harjoitustyökauden kriittisimmillä hetkillä. Toisinaan ne eivät riitä, jolloin Matlab herjaa siitä virheilmoituksella. Tällöin pitää vaan kiltisti odottaa ja kokeilla uudetaan vähän ajan päästä, josko joku on lopettanut käytön.

Toiseen suodinsuunnitteluun liittyvään toolboxiin on vain 14 lisenssiä TKK:n laajuisesti. Näin ollen sitä ei voida käyttää Matlab-laskareissa tai harjoitustyössä.

Kurssin Matlab-funktioita

Näitä funktioita voi vapaasti käyttää kurssin harjoituksissa ja harjoitustyössä.

Esimerkkikoodia

Esimerkki 2 - m-funktio

Alla tiedosto getdeg.m, joka laskee kompleksiluvun z = x+yj kulman asteissa.
function [deg] = getdeg(z)
% GETDEG laskee kompleksiluvun z = x+yj kulman asteissa.
%   Käyttö:  [deg] = getdeg(z)

% Jukka Parviainen, 2007-01-26
%   (HUOM! Välissä yksi rivi ilman %-merkkiä, joten
%    nämä eivät enää tulostu "help getdeg":issä.)

x   = real(z);
y   = imag(z);
deg = 180 * atan(y/x) / pi;
Kirjoita seuraavat rivit yksi kerrallaan Matlabin komentoikkunan kehotteeseen (prompt) ja katso mitä saat
help getdeg 
getdeg(3+4j)
[degrees] = getdeg(3+4j);
degrees
Esimerkki 2b: Useammat muuttujat erotetaan pilkulla. Huomaa myös, että funktion sisäiset nimet eivät näy varsinaiseen työtilaan.
function [c2, d2] = tuplaa(c, d)
% TUPLAA 
%   [c2, d2] = tuplaa(c, d)
c2 = 2*c;
d2 = 2*d;
jolloin tätä funktiota voi kutsua mm.
x = 5;
tuplaa(4, x);      % ei tulosta mitään, koska ";" rivin lopussa
tuplaa(4, x)       % tämä tulostaa vain ensimmäisen ulostulomuuttujan
[tuplaA, tuplaB] = tuplaa(4, x);     % tästä molemmat ulostulot 8 ja 10
[tuplaC, tuplaD] = tuplaa(x+2, x-1); % tästä molemmat ulostulot 14 ja 8

Esimerkki 3 - m-skripti

Alla tiedosto matlab_start_3.m
%% Tiedosto matlab_esim3.m
% Tallennan tähän tiedostoon harjoitukseni 2007-01-26

%% Esimerkki 2 - skriptin kutsuminen
% Valmiina skriptitiedosto getdeg.m.
z =  3 + 4j;
[degrees] = getdeg(z);
disp(['Kulman suuruus on ' degrees]);
Yllä olevassa käytettiin koodin lohkorakennetta ("cell mode"). Voit ajaa koodia lohko lohkolta tai generoida dokumentin koodin perusteella. Katso esimerkkiä 4.

Esimerkki 4 - miten hyödynnän "soluja" koodin kirjoituksessa

Kun avaat Matlabin editorin komennolla "edit" ja valitset sitten valikosta "Cell-Enable Cell Mode", niin voit hyödyntää "soluja" koodin kirjoittamisessa ja julkaisemisessa. Solu (cell) tai paremminkin lohko on alue koodia, jonka erottaa kaksi prosenttimerkkiä rivin alussa.

Alla tiedosto matlab_start_4.m
%% Esimerkki 4 --
% Tämä tiedosto demoaa 
%
%

%% Otsikko 1
% ksdf

x = 5;
y = x + 3;

% Lasketaan vielä z
z = x + y

%%
% Tässä siis kahdella prosenttimerkillä

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Tässä taasen huomataan, että lohkon erottimena
% on siis kaksi prosenttimerkkiä JA välilyönti

%% Otsikko N
%
%  koodia



Voit ajaa koodia editorissa lohkon, lohkon kerrallaan ja edetä seuraavaan tai ajaa koko tiedosto kerralla läpi.

Julkaisunappula tuottaa dokumentin joko html- (oletus html), latex- tai doc-muotoisena. Lukuisia viritelmiä valikkokohdassa "File-Publish". Esimerkki julkaistusta dokumentista ja siihen liittyvästä koodista.


[ Pääsivulle | How to start with Matlab in English ]

You are at: CIS → T-61.3010 / Kuinka aloittaa Matlabilla

Page maintained by t613010 (at) cis.hut.fi, last updated Monday, 19-May-2008 09:51:52 EEST

Google
WWW www.cis.hut.fi