Alkuunpääsy
Tämä luku johdattelee Matlab-ympäristöön. help, doc, manuaalit, Mathworksin teksti- ja videodokut ...
This section serves as an intro to the Matlab environment and programming language as well as to this tutorial. It describes how to configure and start using Matlab, search for help, and how to perform file input and output.
Contents
- Mikä on Matlab?
- Matlab:n käynnistys
- Muuttujat
- Tietotyypit ja -rakenteet
- Työtila (workspace)
- Komentoikkuna
- M-tiedostot, skriptit ja funktiot
- Työskentely ja dokumentin tuottaminen editorissa
- Help
- lookfor
- Using this Guide
- Other Matlab resources
>> Palaa indeksisivulle <<
(Tai kertaa Luento 1:n aiheita jatkamalla eteenpäin.)
Mikä on Matlab?
Matlab on kokonainen ohjelmointiympäristö, jonka ydinalue on numeerinen matriisilaskenta. Yksinkertaisimmillaan se toimii helppokäyttöisenä ja tehokkaana matriisilaskimena.
Laskintyöskentelystä päästään joustavasti siirtymään korkean tason funktionaaliseen ohjelmointikieleen, jossa myös olipohjainen ohjelmointi on mahdollista (mutta ei pakollista).
Matlabissa on helppokäyttöinen ja korkeatasoinen grafiikka matemaattisten funktioiden ja (suurtenkin) tietoainesten 2D- ja 3D-visualisointiin. Sen tehokas ohjelmointikieli yhdistettynä valtavaan kokoelmaan valmiita funktioita ja "työkalupakkeja" ("toolboxeja") antaa käyttäjän käsiin erinomaisen protyyppien rakenteluvälineen.
Matlab ei nykyisin ole suinkaan pelkkä protoiluväline, vaan se tukee myös suurteholaskentaa niin oman kielensä kääntämis-, vektorinti-, rinnakaislaskenta- ym. ominaisuuksien ansioista kuin kehittyneillä liitännöillä esim. Fortran- ja C-kielisiin ohjelmiin. Kannattaa myös huomata, että Matlab-tulkki suorittaa vektori- ja matriisioperaatiot kutsumalla optimoituja, käännettyjä kirjastofunktioita. Matlab-kielelle luonteenomaisella vektoriajattelulla saadaan lyhyempää ja tehokkaampaa koodia kuin silmukkaratkaisuilla, joita oikealla Matlab-tyylillä voidaan useissa tapauksissa välttää.
Matlab on ennen kaikkea numeerinen ohjelmisto, mutta sen symbolilaskentaominaisuuksia on myös viime vuosina kehitetty voimakkaasti "Symbolic toolbox":n puolella, jossa varsinaisina symbolilaskentakoneina toimii joko Maple tai Mupad.
Esikuvana Matlab-kielelle toimii "kaikkien vektorikielien äiti": APL, ...
Kokeilua
Kokeilua: Onko muuttuja, vai mikä?
Matlab:n käynnistys
Kaksoisklikkaa Matlab ikonia tai kirjoita Matlab komentokehotteeseen (Unix). Hetken odottelun jälkeen aukeaa Matlab-ikkuna, jonka oletusasu vaihtelee jonkinverran versiosta toiseen siirryttäessä.
Keskellä näkyy komentoikkuna, vasemmassa reunassa hakemisto- ja tiedostoluettelo, oikealla työtilan muuttujaikonit ja sen alla komentohistoria. Yllä näkyy (hiukan heikosti) joukko komentoja, joilla on aikaansaatu erillisessä kuvaikkunassa näkyvä grafiikka. Matlab "desktop":n oletusasu voi hiukan vaihdella version mukaan, lisäksi sitä voi oman mieltymyksen mukaan muutella ylänauhan "Desktop"-valinnalla.
Komentoikkunassa voit ryhtyä laskemaan. Jos sinulla on Matlab käynnissä, ja käytät oppaan lukemiseen Matlabin selainta, järjestä komentoikkuna opasikkunan viereen. Kokeile maalata harmaassa laatikossa oleva koodi kokonaan tai osittain, ja paina F9 opasikkunan puolella. (Muulla selaimella cut/paste.)
format compact % Ei välttämätön, löysät pois laskujen tuloksista. 1 + 1 % Hyvä alku. sqrt(2) % Esimerkki Matlab-funktiosta. pi % Erikoismuuttuja. 'Tekstiä' % Merkkijono. or(true, false) % looginen arvo. Myös or(1,0) tai 1 | 0 randn(2,2) % Satunnaislukumatriisi x = 1:10; plot(x, x .^ 2, 'o-'); title('Paraabelimurtoviivan piirto')
ans = 2 ans = 1.4142 ans = 3.1416 ans = Tekstiä ans = 1 ans = 0.5377 -2.2588 1.8339 0.8622
UNIX-ympäristössä voidaan muistin säästämiseksi käynnistää komennolla
matlab -nojvm ( "No Java virtual machine". )
Tällöin saadaan ruudulle pelkkä komentoikkuna, mutta grafiikka toimii kyllä. Yleensä tähän ei ole tarpeen mennä, siinä menetetään aika paljon käyttömukavuutta. X-etäkäytössä UNIX-työasemalla tämä saattaa joskus pelastaa päivän, jos työskentely muuten käy tukkoiseksi.
Muuttujat
Arvoja voidaan sijoittaa nimetyille muuttujille. Muuttujan nimet ovat hyvin vapaasti valittavissa, kunhan eivät ala numerolla. Myös skandiääkköset ja muut erikoismerkkit ovat tuhoon tuomittuja. (Sensijaan merkkijonomuuttujan sisältämässä tekstissä niitä saa olla.) Sijoitus muuttujaan suoritetaan = - merkillä
kuusi = 6 saa = 'puolipilvinen' kaksi = log10(100) 2^10 log2(ans) % Erikoismuuttuja ans, johon tallettuu edellisen, muuttujaan tallentamattoman laskun tulos
kuusi = 6 saa = puolipilvinen kaksi = 2 ans = 1024 ans = 10
Matlab'n voima on matriisioperaatioissa. Sen nimikin on lyhennys termistä "matriisilaboratorio".
a = [1 2 3 4] % vektori 1:4 % Lyhyemmin: (1:stä yhden välein 4:ään) b = [1 2; 3 4] % matriisi c = ones(2,3,2) % 3-u taulukko
a = 1 2 3 4 ans = 1 2 3 4 b = 1 2 3 4 c(:,:,1) = 1 1 1 1 1 1 c(:,:,2) = 1 1 1 1 1 1
Erikoismuuttujia, matemaattisia vakioita
ans edellisen komennon tulos (ellei sjoitettu muuttujaan)
1+1
ans = 2
pi,eps,i,0/0, 1/0, realmax,realmin % Tutki help:llä
ans = 3.1416 ans = 2.2204e-16 ans = 0 + 1.0000i ans = NaN ans = Inf ans = 1.7977e+308 ans = 2.2251e-308
Tietotyypit ja -rakenteet
Matriisioperaatioiden tarkempi esittely täällä .
Matlabin perustietotyyppi on real - reaalinen liukuluku, jonka esitystarkkuus on n. 16 kymmenjärjestelmän numeroa. Muita ovat logical, complex ja erilaiset integer - tyypit. Kompleksilukujen reaali- ja imaginaariosat ovat tyyppia real. Yleensä tietotyypeistä ei tarvitse huolehtia, useimmin tarvittavat "huolet" lienevät konversiot tyyppien logical ja real välillä, joista tarkemmin tuonnempana. Erilaisten integer- tyyppisten muuttujien tarve ei ihan peruskäytössä heti tulle vastaan. Muuttujien tyyppejä ei tarvitse etukäteen määritellä, ja jotain tyyppiä olevan muuttujan voi sijoituslauseella korvata toisen tyyppisellä tietoalkiolla. (Hienosti sanottuna: dynaamisesti tyypitetty kieli.)
Tietorakenteet ("pakkauslaatikot") ovat
taulukot (matriisit), solutaulukot ("cell arrays"), struktuurit "structures", "struct"'t, ja objektit.
Työtila (workspace)
Työtila on alue muistia, jossa ovat erityisesti käyttöön otetut muuttujat.
Työtilan muuttujat kokoineen ja typpeineen saa näkyviin komennolla
whos % Komento who antaa vain nimet. % % Työtilan havainnollinen graafinen esitys näkyy myös ikkunassa % "Workspace", jonka kautta muuttujaa voi katsella ja editoida myös % muuttujaeditorilla (kaksoisklikkaa ao. muuttujaikonia).
Name Size Bytes Class Attributes a 1x4 32 double ans 1x1 8 double b 2x2 32 double c 2x3x2 96 double kaksi 1x1 8 double kuusi 1x1 8 double saa 1x13 26 char toolbox_version 1x5 10 char x 1x10 80 double
Muuttujan a voi poistaa komentamalla clear a ja kaikki työtilan muuttujat komennolla
clear all % tai pelkästään clear
Komentoikkuna
Edellä jo kirjoiteltiin laskutoimituksia ja muita käskyjä komentoikkunaan. Suuria datoja käsiteltäessä on tärkeää osata lopettaa komento puolipisteeseen (;), jotta tulosta ei turhaan näytetä ruudulla. Katsotaan pienimuotoisesti:
Id4 = eye(4,4) % Ykkoset5 = ones(5,5); % Tulosta ei näy. % Jos haluat nähdä, kirjoita muuttujan nimi (ilman puolipistettä) Ykkoset5
Id4 = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Ykkoset5 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Komentoikkunassa voidaan nuolinäppäimellä "nuoli ylös" ottaa esiin edellinen komento, jota voidaan tarpeen mukaan editoida komentorivillä. Taaksepäin kelausta voidaan jatkaa pitemmällekin. Tällä tekniikalla voidaan suorittaa pienimuotoisia iteraatioita ilman ohjelmointirakenteita.
Esimerkki nuolinäppäiniteraatiosta. Tässä esiintyy joitakin Matlab-operaatioita, jotka selitetään tarkemmin jatkossa.
Uusissa versioissa on "command history"-ikkuna, josta voidaan kaksoisklikkauksella panna suoritukseen haluttu komento. **Lisää helpistä, miten komento tuodaan editoitavaksi ennen suoritusta**
Matlab-komentojen tunnistusta kannattaa myös hyödyntää, komennon alkuosa täydentyy mahdollisilla jatkoilla TAB-painikkeella.
M-tiedostot, skriptit ja funktiot
- 1. Skriptit
- 2. Funktiotiedostot
- 3. Funktio-osoittimet ("Function handles")
M-tiedosto on tekstitiedosto nimi.m. Niitä on kahta typpiä: skriptitiedostot ja funktiotiedostot.
1. Skriptit
Tekstitiedostoon omaskripti.m voidaan kirjoittaa Matlab-komentoja, jotka suorittuvat, kun komentoikkunassa kirjoitetaan tiedoston nimi: omaskripti
Tiedoston on oltava Matlabpolun (matlabpath) varrella. Suoritus voidaan uusissa Matlab-versioissa käynnistää myös suoraan Matlab-editorista esim. työkalunauhan vihreää nuolta painamalla tai F5:llä.
Tiedosto voidaan kirjoittaa millä tahansa tekstieditorilla, suositeltavaa on käyttää Matlabin omaa editoria, joka mahdollistaa yllä mainittujen käynnistystapojen lisäksi monia muita käyttömukavuuksia.
Esim: Suuren matriisin luominen (tässä havainnollistetaan pienellä).
Luodaan tiedosto teematriisi.m komentoikkunan file-valikosta -> new -> script. Kirjoitetaan sinne rivejä tähän tapaan ja annetaan komento teematriisi .
A= [1.1 2.2 -4.2 i; 5.7 -2.9 8.567 pi]
A = 1.1000 2.2000 -4.2000 0 + 1.0000i 5.7000 -2.9000 8.5670 3.1416
M-tiedostoa käytetään yleisesti Matlab-komentojen tallettamiseen. Erityisesti käytettäesä ohjausrakenteita, kuten for, while,if-else-elseif-end ym., komennot kirjoitetaan aina m-tiedostoon eikä suoraan Matlab-istuntoon. Skripti-m-tiedosto toimii näin Matlab-koodin talletuspaikkana. Varsinainen ohjelmointi tehdään kuitenkin funktio-m-tiedostossa, josta seuraavassa.
Samoin puhutaan kohta enemmän dokumentin tuottamisesta m-tiedoston avulla.
2. Funktiotiedostot
Funktiotiedosto antaa mahdollisuuden Matlab:n laajentamiseen itse määriteltävillä funktioilla. Jos avaat editorin File-valikosta new->function, syntyy tiedosto, jossa on seuraavat rivit .
function [ output_args ] = Untitled( input_args ) %UNTITLED Summary of this function goes here % Detailed explanation goes here
- Otsikkorivi : fuction [y1,y2,...,ym] = funnimi(x1,x2,...,xn)
- Talletetaan tiedostoon funnimi.m (Tiedoston nimi on määräävä.)
- Syöteparametrit x1,...,xm ja tulosparametrit y1,...,yn voivat olla mitä tahansa Matlabin tietorakenteita, tyypillisimmin matriiseja.
- Kaikki käytetyt muuttujat, niin parametrit kuin apumuuttujat ovat paikallisia (lokaaleja), ellei global-komennolla muuta vaadita.
- Otsikkorivin jälkeiset, %-alkuiset kommenttirivit tulostuvat komentoikkunassa komennolla help funnimi.
- Kaikki koodirivit on syytä lopettaa puolipisteellä, jotta vältytään häiritseviltä ylimääräisiltä tulostuksilta funktiota kutsuttaessa.
- Funktio palauttaa kussakin tulosmuuttujassa sille viimeksi sijoitetun arvon.
Huom! Kaikki m-tiedostot ovat aivan tavallisia tekstitiedostoja. Jos jostain syystä haluat käyttää jotain muuta tekstieditoria, se käy aivan hyvin. Tällöin tietysti Matlabin editorin tarjoamat avut jäävät pois.
Parhaiten asia tulee tutuksi (myös yleisesti ohjelmontiin perehtymättömälle) esimerkkien avulla.
Esim:
%{ Ajatellaanpa, että haluaisimme laskea annettujen lukujen keskiarvon. Luvut olisi sopivaa tallettaa vektoriin x. Keskiarvo saataisiin yksinkertaisesti lausekkeella sum(x)/length(x). % Vektorin x alkioiden summa jaettuna alkioiden lkm:llä. Kokeillaan vaikka näin: %} x=1:10 keskiarvo=sum(x)/length(x) %
x = 1 2 3 4 5 6 7 8 9 10 keskiarvo = 5.5000
Kun tämä ajatus muutetaan yleispäteväksi funktioksi, jolle voidaan antaa syötteeksi mikä tahansa vektori x, avataan tiedosto keskiarvo.m, jonne kirjoitetaan:
function y = keskiarvo(x) % Funktio palauttaa syötevektorin x alkioiden keskiarvon. % y = sum(x)/length(x); %
Kutsutaan vaikka:
k100=keskiarvo(1:100)
Index exceeds matrix dimensions.
Error in ==> Alkuunpaasy at 278 k100=keskiarvo(1:100)
Mitä ihmettä!? Täysin sekopäinen virheilmoitus. Syy selviää tarkistamalla:
which keskiarvo
keskiarvo is a variable.
Yllä käytimme epäonneksemme keskiarvo-nimistä muuttujaa, jonka Matlab priorisoi samannimiseen funktioon nähden. No, poistetaan tuo muuttuja, niin elämä taas hymyilee.
clear keskiarvo % clear poistaa muuttujan, sen valta ei ylety tiedostoon % talletettuun funktioon k100=keskiarvo(1:100)
k100 = 50.5000
Käytä which-komentoa nimikonflikteihin
Edellä olevan kaltaiset käsittämättömät virhetilanteet ratkeavat which-komennolla. Muuttujan ja funktion nimikonfliktin lisäksi usein saattaa esiintyä funktioiden välisiä konflikteja. Jos kirjoitat moneen paikkaan Matlabpolun varrelle funktiotiedoston f.m, saat varmasti aikaan sekaannusta.
which f
paljastaa, mikä on Matlab:n valinta f-funktioksi.
Matlab:n omat funktiot - verraton esimerkkikokoelma
Suuri osa Matlab-funktioista on m-tiedostoja, joiden koodi on avoin. Niistä on hyvä ottaa opiksi. Helppona esimerkkinä mainittakoon vaikka funktio flipud, joka kääntää matriisin rivit "ylhäältä alas".
Tehtävä: Suorita komento type flipud, huomaat, että varsinaista koodia on vain yksi rivi. Kaikki muu on help-dokumenttia tai virheellisen argumentin eliminoimista.
Suorita myös help flipud.
3. Funktio-osoitin, "Function handle"
Lyhyen, yhdellä rivillä määriteltävän funktion voi määritellä myös suoraan Matlab-istunnossa tyyliin:
f=@(x)x.*sin(x)
f = @(x)x.*sin(x)
Lue: "At(x) arvo(x)", vastaten matemaattista merkintää: x->f(x). Tätä tapaa käytettiin jo edellä iteraatioesimerkissä. Tämä korvaa vanhan 'inline'-määrittelyn, jota ei suositella enää käytettäväksi (mutta vanhan koodin yhteensopivuuden takia toimii toki).
>> Palaa indeksisivulle <<(Tai kertaa Luento 1:n aiheita jatkamalla eteenpäin.)
Työskentely ja dokumentin tuottaminen editorissa
Uusi dokumentointivälineistö editoreineen tukee vahvasti sellaista työtapaa, että Matlab-työskentely suoritetaan enenevässä määrin editorissa. Sen lisäksi, että skripti-m-tiedostoon saadaan Matlab-komennot talteen, tiedoston avulla voidaan jäsentää työ kappaleiksi, joita rajoittavat kaksoisprosenttien (%%) väliset alueet. Näin voidaan helposti ajaa tiedoston komentoja osissa asettamalla osoitin jonkun kappaleen sisään ja painamalla CTR-ENTER.
Tämän lisäksi syntaksiltaan kunnossa oleva m-tiedosto voidaan ajaa html-dokumentiksi alla olevan esimerkin mukaisesti. (Esimerkissä käsitellään matriiseja ja lineaarisia yhtälöryhmiä, Matlab:n ydinaluetta, josta lähemmin tuonnempana.)
Esimerkki työtavasta: komentotiedosto, eli "m-tiedosto"
Kun m-tiedoston editorin FILE-valikosta valitaan publish, saadaan m-tiedoston komennot ja niiden tuottamat tulosteet kuvineen html-muodossa. Tässä tapauksessa näin.
Itse asiassa koko tämä Matlab-opas on joukko m-tiedostoja, jotka on publish-komennolla ajettu html-dokumentiksi.
Erityisesti oppilastöissä tämä on korvaamattoman hyödyllinen toimintatapa ja siirtää vanhan diary-komennon "Matlab-museoon".
Publish-komennon help-dokumentaatiota:
doc publish -> Example: Sine Fourier
Help->Product help->User's Guide->Desktop Tools and Development Env. -> Publishing Matlab-code
Help
Matlabissa on laaja ja monipuolinen avustusjärjestelmä. Matlab-ikkunan help-valikko -> product help Tästä löytyy perusavustuslinkit, kuten
- Getting started - sisältää myös hyviä videotutoriaaleja
- User Guides - Laaja dokumenttikokoelma
- Getting help
- Examples
help fnimi Matlab-komentoikkunassa tulostaa Matlab-funktion fnimi ohjetekstin ko. ikkunaan.
doc fnimi avaa Matlabiin nettiselaimen ja tulostaa avustustekstin kauniimmassa ja joskus laajemmassa muodossa.
Jälkimmäinen on yleensä selkeämpi, mutta edellinen on taas nopeampi.
lookfor
Komento etsii annettua merkkijonoa kaikkien Matlab-funktioiden ensimmäiseltä kommenttiriviltä. Siksi tulostusta tulee joissakin tapauksissa varsin runsaasti ja sen loppumista joutuu odottelemaan. Vastaavasti siitä voi olla paljon iloa, sen avulla voi tehdä hyviä löytöjä.
You can look for functions which contain a specified string in the first line of their documentation (see here
Kokeile vaikka
- lookfor random
- lookfor quadratic
- lookfor 'curve fitting'
- lookfor polynomial
[Sivun sisällysluetteloon] [Oppaan alkusivulle]
Using this Guide
This tutorial so broken into several small chapters, which are themselves composed of a number of subsections. For the most part, the chapters are self contained and can be read in isolation as needed. As the code for the examples is embedded right into the document, it may be advantageous to open the tutorial in the Matlab web browser so that you can try out the examples as you read. Just type something like web yagtom.googlecode.com at the command prompt. You can then click on 'Desktop -> dock browser' so the browser will appear inside the matlab editor as illustrated below.
You can execute code by highlighting it on the web page and pressing F9. The statements are processed as though they were typed one at a time in the command window. Or you can cut and paste between different windows. Note that some of the examples use functions or data that are not built-in to matlab. These can be download here: http://code.google.com/p/yagtom/downloads/list. You should unzip these in some directory, and then add them to your matlab path by typing something like
addpath(genpath('C:\matlabTutorial\mfiles'))
Click here for more details on the matlab path.
Other Matlab resources
There are many other resources related to Matlab. We list some of them below.
- Getting started in Matlab, the official 260 page guide.
- official links to other tutorials
- matlab central, source of free software, of variable quality.
- matlab newsgroup, a place where you can post questions and people may answer them for you.