Alkuunpääsy

[Koko oppaan alkusivulle]

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 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 $\alpha$ 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

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

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

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

[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.


[Tämän tiedoston alkuun] | [Koko oppaan alkusivulle] | [Seuraava aihe: Matriisit]