matlab opas - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · matlab opas matti pastell...

26
MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta 2010 -5 0 5 10 15 20 25 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 http://papers.mpastell.com/matlab_opas.pdf

Upload: others

Post on 08-Jul-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

MATLAB OPAS

Matti Pastell

[email protected]

Maataloustieteiden laitos, Helsingin Yliopisto

11. tammikuuta 2010

−5 0 5 10 15 20 250

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

http://papers.mpastell.com/matlab_opas.pdf

Page 2: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

SISÄLTÖ 2

Sisältö

1 Johdanto 4

2 Ohjelman hankinta ja käytön aloitus 5

3 Muuttujat ja peruslaskutoimitukset 53.1 Muuttujien määrittely ja peruslaskutoimitukset . . . . . . . . . . 5

4 Vektorit ja Matriisit 64.1 Vektorilaskutoimituksia . . . . . . . . . . . . . . . . . . . . . . . 6

4.2 Matriisien käsittelyä . . . . . . . . . . . . . . . . . . . . . . . . . 7

5 Datan peruskäsittely ja kuvaajat 75.1 Esimerkkiohjelma 2d kuvaaja ja sen tallennus. . . . . . . . . . . . 9

5.2 Esimerkkiohjelma 3d kuvaaja ja sen tallennus . . . . . . . . . . . 10

5.3 Julkaisukelpoiset kuvat . . . . . . . . . . . . . . . . . . . . . . . 10

6 Tiedostojen käsittely ja hakemistot 11

7 Omat ohjelmat 127.1 Skriptit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

7.2 Funktiot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

8 Perusohjelmointi 148.1 Silmukka eli loop . . . . . . . . . . . . . . . . . . . . . . . . . . 14

8.2 Ehtolauseet: if, else ja elseif . . . . . . . . . . . . . . . . . . . . 15

9 Tehtävien automatisointi eli ”Batch-mode” 16

10 Sekalaisia vinkkejä 1710.1 Hyödyllisiä komentoja . . . . . . . . . . . . . . . . . . . . . . . 17

10.2 Piikkien etsintä datasta . . . . . . . . . . . . . . . . . . . . . . . 18

10.3 Tekstitiedostojen muunto *.mat formaattiin . . . . . . . . . . . . 19

10.4 Matlabin dialogit . . . . . . . . . . . . . . . . . . . . . . . . . . 20

11 Signaalin käsittely 2011.1 FFT - taajuuden etsintä signaalista . . . . . . . . . . . . . . . . . 20

12 Neuroverkot 2112.1 Probabilistic Neural Network . . . . . . . . . . . . . . . . . . . . 21

13 Sumea Logiikka 23

Page 3: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

SISÄLTÖ 3

Viitteet 25

Page 4: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

1 Johdanto 4

1 Johdanto

Tämän oppaan tarkoitus on opettaa MATLABin1 peruskäyttö ja hyödyllisiä ko-

mentoja. Mukana on myös muutama hieman edistyneempi esimerkki. MATLAB

on kaupallinen ohjelma ja sen hankintahinta on melko suuri, tosin opiskelijaver-

sio on huomattavasti halvempi, n. 70 e. Helsingin yliopistolla on ohjelmistoon

laaja lisenssi, joka ei kuitenkaan kata ohjelman asennusta opiskelijoiden omille

koneille. Kotoa ohjelmaa pääsee käyttämään ottamalla yhteyden yliopiston ruu-

vi.helsinki.fi (edellyttää Unix lupaa).

Pyrin täydentämään opusta tarpeen mukaan ja viimeisimmän version löytää koti-

sivuiltani. Suositan aloittelijalle komentojen testaamista samalla, kun luet opasta.

Parannusehdotukset ja virheilmoitukset voi lähettää sähköpostitse

[email protected]. Opas on kirjoitettu LATEX- kuvauskielellä.

Usein kysytään eikö olisi helpompaa käyttää Exceliä, SPSS tms. Komentorivipoh-

jaiset ohjelmat saattavat tuntua aluksi vaikeilta käyttää, mutta niiden ominaisuudet

ovat ylivoimaisia esim. suurten datamäärien käsittelyssä, omien funktioiden kir-

joittamisessa ja simuloinnissa. Jatkuvissa mittauksissa syntyy tarve automatisoida

datan käsittely. Useita satoja tai tuhansia tiedostoja analysoivan ohjelman teko on

Matlabissa verraten helppoa ja säästää valtavasti aikaa. Lisäksi hieman nopeam-

missa mittauksissa syntyy niin paljon dataa, että sen käsittely Excelissä on käy-

tännössä mahdotonta. Esim. 50 Hz mittaustaajuudella vuorokauden mittauksessa

kertyy n. 4,2 miljoonaa datapistettä eli n. 63 Excelin täyttä saraketta.

Matlabissa on graafisia työkaluja mm. tiedostojen avaamiseen ja kuvaajien piirtä-

miseen. Lisäksi ohjelmaan on saatavissa suuri määrä erilaisia "toolboxeja" esim.

käyrän sovitusta, tilastoanalyyseja, mittauksia ja neuroverkkomalleja varten. Hel-

singin yliopistolla on kattava Matlab lisenssi (eli sisältää myös runsaasti toolboxe-

ja), joka kattaa ohjelman käytön laitosten koneissa. Lisäksi Matlabiin kuuluu graa-

finen mallin rakennusympäristö ”Simulink”, jota ei käsitellä tässä oppaassa mutta

verkosta löytyy runsaasti ohjeita myös Simulinkille.

Koodi on tekstissä värillistä ja kommentit on merkitty %−merkillä

1MATLAB http://www.mathworks.com

Page 5: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

2 Ohjelman hankinta ja käytön aloitus 5

2 Ohjelman hankinta ja käytön aloitus

Kuten edellä on mainittu niin Matlab on kaupallinen ohjelma. Tietoa Matlabin

hankinnasta löytyy osoitteesta www.mathworks.com. Helsingin yliopiston lisens-

si ei valitettavasti sisällä opiskelijoiden kotikäyttöä, mutta kotona Matlabia voi

käyttää verkon välityksellä ottamalla ssh-yhteyden yliopiston Unix palvelimelle

ruuvi.helsinki.fi, unix tunnukset saat laitoksen ATK-yhdyshenkilöltä. Asennettua-

si ohjelman se löytyy Windowsin käynnistä valikosta: Matlab kansiosta ja unixis-

sa/linuxissa kirjoittamalla komentoriville matlab.

3 Muuttujat ja peruslaskutoimitukset

3.1 Muuttujien määrittely ja peruslaskutoimitukset

Peruslaskutoimitusten teko on helppoa. Muuttujia ei tarvitse erikseen määritellä

vaan määrittely tapahtuu automaattisesti, kun muuttujalle annetaan arvo. Eli yk-

sinkertaisesti kirjoitetaan komentoriville(ikkunaan):

%Muut tu ja a s a a a rvon 1

a =1

%Muut tu ja b s a a a rvon 2

b=2

Tämän jälkeen voidaan suorittaa peruslaskutoimitus määritellyillä muuttujilla. Huo-

maa, että muuttujien kirjankoolla on väliä eli a 6= A.

c=a+b

c=a−b

c=a *b

c=a / b

Huomaat, että ohjelma tulostaa vastauksesi ruudulle. Yksittäisissä laskutoimituk-

sissa tämä ei haittaa, mutta suurilla datamäärillä tulosta ei haluta aina nähdä. Las-

kutoimituksen tulos saadaan piilotettua lisäämällä ; komennon perään.

Tulos saadaan jälleen ruudulle kirjoittamalla muuttujan nimi. Kaikki määrittele-

mäsi muuttujat tallentuvat ohjelmien työtilaan Matlabissa se on näkyvissä ohjel-

man käyttöliittymässä. Saat listattua muuttujat työtilaan komennolla who ja työti-

lan saa tyhjennettyä komennolla clear .

%N ä y t t ä ä k a i k k i t y ö t i l a s s a o l e v a t t i e d o s t o t

Page 6: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

4 Vektorit ja Matriisit 6

who

%T y h j e n t ä ä k a i k k i m u i s t i s s a o l e v a t m u u t t u j a t

c l e a r

%T y h j e n t ä ä ruudun

c l c

4 Vektorit ja Matriisit

Ohjelmat käsittelevät dataa matriisimuodossa tai vektorimuodossa. Muuttuja, jos-

sa on vain yksi rivi tai sarake on vektori ja muuttuja, jossa on monta saraketta ja

riviä on matriisi (array). Myös matriisimuotoisilla muuttujilla voidaan suorittaa

skalaarilaskutoimituksia ja tässä oppaassa keskitytäänkin lähinnä niihin. Seuraa-

vassa muutamia esimerkkejä laskemisesta vektoreilla ja matriiseilla.

4.1 Vektorilaskutoimituksia

%Luodaan v e k t o r i , j o k a s a a a r v o t 1−5}

v e k t o r i =1:5

v e k t o r i =[1 2 3 4 5]

%Yhteen j a v ä h e n n y s l a s k u

v e k t o r i + v e k t o r i

v e k t o r i −v e k t o r i

v e k t o r i +5

v e k t o r i −5

%K e r r o t a a n koko v e k t o r i 2 : l l a

t u p l a = v e k t o r i *2

%S k a l a a r i t u l o . HUOMAA p i s t e " v e k t o r i " : n j ä l k e e n k e r t o o

% o h j e l m a l l e e t t ä k y s e e s s ä on s k a l a a r i l a s k u t o i m i t u s

v e k t o r i . * t u p l a

%V e k t o r i t u l o

v e k t o r i * t u p l a

%J a k o l a s k u

v e k t o r i . / t u p l a

%K o r o t e t a a n t o i s e e n

v e k t o r i . ^2

luku =" v e k t o r i n " n e l j ä s numero

luku = v e k t o r i ( 4 )

%V e k t o r i " l u v u t " = " v e k t o r i n " 3 : s −5: s numero

l u v u t = v e k t o r i ( 3 : 5 )

Page 7: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

4.2 Matriisien käsittelyä 7

4.2 Matriisien käsittelyä

Matlabin vahvuus datan käsittelyssä on datan käsittely matriisimuodossa, joka te-

kee suurenkin datamäärän käsittelyn joustavaksi. Yleensä perusmittausdatan kä-

sittelyssä ei tarvita osaamista matriisilaskennassa, vaan halutaan esimerkiksi, ker-

toa ja jakaa koko datamäärä esim. kalibrointikertoimellatms. tämä käy komentori-

viltä hyvin helposti. Usein laskutoimituksia halutaan suorittaa myös riveittäin eli

esim. laskea jokaisen rivin summa, keskiarvo, hajonta... Tämä esitellään seuraa-

vassa kappaleessa.

%Luodaan 3x2 m a t r i i s i

m a t r i i s i =[3 2 ; 4 1 ; 6 3]

%K e r r o t a a n k a i k k i m a t r i i s i n a r v o t 2 : h d e l l a

t u p l a = m a t r i i s i * 2 ;

%S k a l a a r i t u l o

t u p l a . * m a t r i i s i

% T r a n s p o n o i d a a n m a t r i i s i

t r a n s m a t r i i s i = m a t r i i s i '

%M a t r i i s i t u l o

m a t r i i s i * t r a n s m a t r i i s i

m a t r i i s i * m a t r i i s i '

Jne. Käyttäytyvät samoin kuin vektorit.

%V a l i t a a n m a t r i i s i n ens immäinen r i v i ( 1 ) j a k a i k k i

% s a r a k k e e t

r i v i = m a t r i i s i ( 1 , : )

%V a l i t a a n m a t r i i s i n kolmas ( 3 ) s a r a k e j a k a i k k i r i v i t ( : )

s a r a k e = m a t r i i s i ( : , 3 )

%V a l i t a a n m a t r i i s i n r i v i t 1−2 ( 1 : 2 ) j a s a r a k k e e t 2−3

% ( 2 : 3 )

o s a m a t r i i s i = m a t r i i s i ( 1 : 2 , 2 : 3 )

%M a t r i i s i n koko

s i z e ( m a t r i i s i )

5 Datan peruskäsittely ja kuvaajat

Tässä kappaleessa tutustutaan data peruskäsittelyyn. Aloitetaan luomalla data sa-

tunnaisluvuista ja laskemalla sen keskiarvo mean ja keskihajonta std. Ohjelma

palauttaa ruudulle datan jokaisen sarakkeen keskiarvon ja keskihajonnan.

Page 8: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

5 Datan peruskäsittely ja kuvaajat 8

%Luodaan d a t a (10 x5 m a t r i i s i ) s a t u n n a i s l u v u i s t a v ä l i l l ä

%0−1 j a k e r r o t a a n se 1 0 : l l ä

d a t a = rand ( 1 0 , 5 ) ;

%K e s k i a r v o

mean ( d a t a )

%K e s k i h a j o n t a

s t d ( d a t a )

%T a l l e n t a a k e s k i a r v o n m u u t t u j a a n ` ` k e s k i a r v o ` `

k e s k i a r v o =mean ( d a t a ) ;

Usein datasta halutaan myös kuvaaja. Ohjelmassa on mahdollisuus piirtää useita

erilaisia kuvaajia, alla muutamia yksinkertaisia esimerkkejä.

%V i i v a k u v a a j a

p l o t ( x , y )

%V i i v a k u v a a j a , v i i v a n l e v e y s , t y y p p i k a t k o v i i v a j a v ä r i

%puna inen k s . s e u r a a v a e s i m e r k k i

p l o t ( x , y , '−−r ' , ' l i n e w i d t h ' , 2 ) ;

%P ylväsd ia gr a mmi

b a r ( d a t a )

%P i i r r e t ä ä n h i s t o g r a m m i e l i jakauma

h i s t ( d a t a )

%P i i r a k k a d i a g r a m m i

p i e ( d a t a )

Kuvien muokkaaminen onnistuu Matlabissa suoraan kuvaajan ikkunasta "plot tools":n

avulla, mutta selitteiden lisääminen on usein kätevämpää komentoriviltä. Muuta-

mia peruskomentoja:

x l a b e l ( ' x−a k s e l i ' )

y l a b e l ( ' y−a k s e l i ' )

t i t l e ( ' k u v a a j a n o t s i k k o ' )

a x i s ( [ x−p i e n i n x−s u u r i n y−p i e n i n y−s u u r i n ] )

Kuvan tallentaminen tiedostoon onnistuu käskyllä print , tiedostomuoto määritel-

lään syntaksilla ”-dmuoto”. Kuvan voi tallentaa myös valikosta ”file->save as” tai

”file->export setup”. Esimerkkejä komentorivi:

%png

p r i n t −dpng kuva .png

%v ä r i l l i n e n p o s t s c r i p t

p r i n t −dpsc k u v a . p s

%pdf

Page 9: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

5.1 Esimerkkiohjelma 2d kuvaaja ja sen tallennus. 9

p r i n t −dpdf k u v a . p d f

%e n c a p s u l a t e d p o s t s c r i p t

p r i n t −dpepsc k u v a . e p s

5.1 Esimerkkiohjelma 2d kuvaaja ja sen tallennus.

%S i n i k ä y r ä n p i i r t o j a t a l l e n n u s png t i e d o s t o o n

a =0:0 . 0 5 : 2 * p i ;

p l o t ( s i n ( a ) , '−−r ' , ' l i n e w i d t h ' , 2 ) ;

l e g e n d ( ' s i n ( a ) ' )

%Merk innä t j a a k s e l i e n r a j a t

x l a b e l ( ' x−a k s e l i ' ) ; y l a b e l ( ' y−a k s e l i ' )

a x i s ( [ 0 6 . 3 −1 . 2 1 . 2 ] )

%T a l l e n n u s png−f o r m a a t i s s a

p r i n t −dpng s i n i . p n g

0 1 2 3 4 5 6

−1

−0.5

0

0.5

1

x−akseli

y−

akseli

sin(a)

Page 10: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

5.2 Esimerkkiohjelma 3d kuvaaja ja sen tallennus 10

5.2 Esimerkkiohjelma 3d kuvaaja ja sen tallennus

%Luodaan m a t r i i s i t x j a y meshgr id f u n k t i o l l a

[ x , y ]= meshgr id ( [ − 1 2 : 1 / 2 : 1 2 ] ) ;

%L a s k e t a a n z−k o o r d i n a a t t i e r i f u n k t i o n a r v o i l l a

z= s i n ( s q r t ( x . *x+ y . *y ) ) . / s q r t ( x . *x+ y . *y ) ;

%P i i r r e t ä ä n k u v a a j a

mesh ( x , y , z ) ;

%Merk innä t k u v a a j a a n

t i t l e ( ' Mesh ' )

x l a b e l ( ' x−a k s e l i ' )

y l a b e l ( ' y−a k s e l i ' )

z l a b e l ( ' z−a k s e l i ' )

%T a l l e n n e t a a n k u v a 3 d . e p s t i e d o s t o o n

p r i n t −depsc k u v a 3 d . e p s

−15−10

−50

510

15

−15

−10

−5

0

5

10

15

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

x−akseliy−akseli

z−

akseli

5.3 Julkaisukelpoiset kuvat

Julkaisukelpoisten kuvien tuottaminen Matlabilla on helppoa. Kuvia pystyy muok-

kaamaan ”Plot toolsien avulla”. Työkalut saa näkyviin klikkaamalla kuvan pääl-

lä näkyvistä kuvakkeista oikean puolimmaisinta ”Show plot tools”. Voit helposti

muokata kuvaajan värejä, fonttia, viivan paksuutta, lisätä selitteitä ja myös piirtää

kuvaan mm. nuolia. Ohjelmasta löytyy myös erittäin kätevä toiminto, jolla kuvan

saa tallennettua haluamaansa formaattiin oikeassa koossa ja sopivalla resoluutiol-

la. Se löytyy valikosta ”File->Export Setup...”. Avautuvasta ikkunasta voit muut-

Page 11: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

6 Tiedostojen käsittely ja hakemistot 11

taa haluamiasi ominaisuuksia ja lopuksi tallennettua kuvan valitsemalla ”Export”.

Julkaistavia kuvia muokatessa, ehkä tärkeintä on valita riittävä resoluutio eli ai-

nakin 300, mutta mieluummin 600 dpi (löytyy ”rendering” - välilehdeltä). Hyviä

laadullisesti häviöttömiä formaatteja kuvien tallennukseen ovat eps, pdf, tiff ja

png (toisin kuin esim. jpg ja gif).

6 Tiedostojen käsittely ja hakemistot

Matlab tunnistaa dos- ja unix-komentoja hakemistoissa liikkumiseen ja tiedosto-

jen käsittelyyn. Hakemistoissa liikkuminen tapahtuu komennolla cd hakemisto.

cd d : \ d a t a

cd c : \

Hakemistossa olevat tiedostot saadaan listattua ruudulle komennoilla

l s

d i r

% L i s t a a k a i k k i t e k s t i t i e d o s t o t h a k e m i s t o s s a

l s * . t x t

d i r * . t x t

t i e d o s t o t = d i r ( ' * . t x t ' ) ;

Numeroarvoja sisältävä tiedosto saadaan ladattua ohjelmaan komennolla load tai

komennolla dlmread Matlabin valikoista löytyy myös työkalu nimeltä Import wizard.

Excel tiedostoja voi lukea komennolla xlsread .

Esim. luetaan tiedoston "data.txt"sisältö muuttujaan "data". Puolipiste komennon

viimeisenä kertoo ohjelmalle, että kaikkia numeroita ei tulosteta näytölle. Huo-

mioi, että desimaalierottimena toimii ainoastaan piste, jos siis olet käyttänyt pilk-

kua ohjelma ei osaa lukea numeroita ja on syytä käyttää esim. notepadin korvaa

toimintoa pilkkujen muuntamisessa pisteiksi. Ohjelmien omassa formaatissa ole-

vien tiedostojen avaaminen on vielä helpompaa:

%T oimi i j o s t i e d o s t o s s a on p e l k k i ä n u m e r o i t a

d a t a = l o a d ( ' d a t a . t x t ' ) ;

%L ue taan d a t a oh je lmaan j ä t t ä e n ensimmäinen r i v i p o i s

% ( 1 , 0 ) j a k ä y t e t ä ä n e r o t t i m e n a s a r k a i n t a )

d a t a = dlmread ( ' d a t a . t x t ' , ' \ t ' , 1 , 0 ) ;

%Avataan oh je lman oma t i e d o s t o t i e d o s t o . m a t k s .

% t a l l e n t a m i n e n a l l a

Page 12: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

7 Omat ohjelmat 12

l o a d t i e d o s t o . m a t

Tiedostojen tallentaminen Matlabin omassa binäärimuotoisessa *.mat formaatissa

onnistuu komennolla save. Data on myös mahdollista tallentaa ASCII-muodossa

komennolla dlmwrite ja excel muodossa komennolla xlswrite . Tässä muutamia

esimerkkejä save käskyn käytöstä:

%T a l l e n t a a k a i k k i t y ö t i l a n m u u t t u j a t t i e d o s t o o n

% t i e d o s t o . m a t

save t i e d o s t o . m a t

%T a l l e n t a a t y ö t i l a s s a o l e v a t m u u t t u j a t " m u u t t u j a 1 " j a "

% m u u t t u j a 2 " t i e d o s t o o n t i e d o s t o . m a t

m u u t t u j a 1 =1; m u u t t u j a 2 =2;

save t i e d o s t o . m a t m u u t t u j a 1 m u u t t u j a 2

%T a l l e n n e t a a n M a t l a b i n 6− v e r s i o n k a n s s a y h t e e n s o p i v a

% t i e d o s t o . T a r v i t a a n , j o s h a l u t a a n k ä y t t ä ä m a t l a b i n

%vanhaa v e r s i o t a t a i e s i m . Octave j a R o h j e l m i a

% t i e d o s t o n avaamiseen

save −v6 t i e d o s t o . m a t

7 Omat ohjelmat

Käyttäjän omia ohjelmia Matlabissa ovat m-filet eli *.m päätteiset tiedostot. Nii-

den avulla pystyään automatisoimaan tiedostojen käsittely tai tekemään esimer-

kiksi simulointiohjelma. M-filejä on kahta tyyppiä: itsenäisesti komentoriviltä ajet-

tavia ohjelmia eli skriptejä, joilla voi automatisoida tehtäviä ja funktioita, joita voi

kutsua komentoriviltä (tai toisista ohjelmista) ohjelman omien funktioiden tapaan,

kuten esim. mean - funktiota. Matlabissa on oma editori ja uusi M-file saadaan

tehty valitsemalla "File>new>M-file".

7.1 Skriptit

Skripti on sarja komentoja, jotka suoritetaan peräkkäin. Ohjelma voi sisältää myös

ehtolauseita, silmukoita ja kutsuja toisiin ohjelmiin. Alla yksinkertainen esimerk-

ki. Kaikki skriptissä määritellyt muuttujat jäävät muistiin ohjelman työtilaan.

%Tämän e s i m e r k i n t a r k o i t u k s e n a on n ä y t t ä ä mi ten M− f i l e

% t o i m i i . E ns in m ä ä r i t e l l ä ä n m u u t t u j a t j a s i t t e n

% s u o r i t e t a a n l a s k u t o i m i t u s j a t a l l e n n e t a a n t u l o s .

% K i r j o i t a t a i k o p i o i tämä t e k s t i s u o r a a n e d i t o r i i n j a

Page 13: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

7.2 Funktiot 13

% t a l l e n n a e s i m . n i m e l l ä koe.m , j o h o n k i n hakemis toon

%missä t i e d ä t sen o l e v a n .

%T y h j e n n e t ä ä n t y ö t i l a , e t t e i v ä t a i k a i s e m m a t m u u t t u j a t

% s o t k e oh je lmaa

c l e a r ;

%x=100 x1 v e k t o r i , j o s s a on s a t u n n a i s l u k u j a

x= rand ( 1 0 0 , 1 ) ;

%l a s k e t a a n x : n k e s k i a r v o

k e s k i a r v o =mean ( x )

%l a s k e t a a n x : n k e s k i h a j o n t a

k e s k i h a j o n t a = s t d ( x )

%P i i r r e t ä ä n x : s t ä k u v a a j a

p l o t ( x )

x l a b e l ( ' x−a k s e l i ' )

y l a b e l ( ' y−a k s e l i ' )

%T a l l e n n e t a a n t u l o s

save t u l o s . m a t

%Tämän j ä l k e e n a j a t i e d o s t o s i i r t y m ä l l ä k y s e i s e e n

%hakemis toon j a k i r j o i t a m− f i l e n nimi e l i " koe.m " −>

%ENTER.

7.2 Funktiot

Funktio luodaan samalla tavalla, kuin itsenäisesti ajettava ohjelma, mutta sen al-

kuun kirjoitetaan määrittely, että kyseessä on funktio. Funktiota kutsutaan myös

komentoriviltä kuten skriptiä, mutta funktioon annetaan haluttu määrä argument-

teja (dataa, kertoimia tms.) ja myös kerrotaan mitä muuttujia funktion halutaan

palauttavan. Erotuksena skriptiin funktio toimii omassa työtilassaan eli funktiossa

määritellyt muuttujat eivät jää ohjelman muistiin. Funktiot ovat käteviä usein suo-

ritettavien laskujen automatisoinnissa. Myös pitkän skriptin pystyy lyhentämään

tekemällä sen osista funktioita (aliohjelmia), joita kutsuu pääohjelmasta.

Pystyt kutsumaan tekemääsi funktiota mistä tahansa hakemistosta, jos sijoitat sen

ohjelman polussa olevaan hakemistoon (tai lisäät oman hakemistosi polkulistaan

(search path)). Soveltuvat hakemistot saat listattua komennolla path ja oman ha-

kemiston saat lisättyä polkuun komennella addpath tai valikosta ”File->Set Path”.

Ohjelmat eivät tallennna addpath-komennolla lisäämääsi hakemistoa polkuun vaan

se pysyy siellä ainoastaan kunnes ohjelma sammutetaan, tästä ongelmasta pää-

see lisäämällä komennon ohjelman käynnistyessään ajamaan tiedostoon (mat-

labrc.m). Samaiseen käynnistystiedostoon voi lisätä muitakin haluamiaan komen-

toja esim. cd omahakemisto; clc

Page 14: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

8 Perusohjelmointi 14

%Tämä on M a t l a b i n e s i m e r k k i f u n k t i o " k l u v u t " , j o k a l a s k e e

% s i i h e n

%s y ö t e t y n d a t a n k e s k i a r v o n , ha jonna n j a k e s k i a r v o n

%k e s k i v i r h e e n . T a l l e n n a t i e d o s t o a i n a s a m a l l a n i m e l l ä ,

%mikä on

%f u n k t i o n nimi e l i n y t k l u v u t . m Kutsu k o m e n t o r i v i l t ä

%muotoa

%[ k e s k i a r v o , k e s k i h a j o n t a , k e s k i v i r h e ]= k l u v u t ( a rvo ) HUOMAA

% , e t t ä

%" k e s k i a r v o , k e s k i h a j o n t a , k e s k i v i r h e j a l u v u t " o v a t

% m u u t t u j a n n imiä

%j a n i i d e n t i l a l l a v o i d a a n k ä y t t ä ä h a l u t t u j a n i m i ä .

% M u u t t u j a s s a " a rvo "

%on k ä s i t e l t ä v ä da ta , " k e s k i a r v o " k e s k i h a j o n t a j a

% k e s k i v i r h e " o v a t

%f u n k t i o n t u l o k s i a .

f u n c t i o n [ k e s k i a r v o , k e s k i h a j o n t a , k e s k i v i r h e ]= k l u v u t ( a rvo )

k e s k i a r v o =mean ( a rvo ) ;

k e s k i h a j o n t a = s t d ( a rvo ) ;

%L a s k e t a a n d a t a s s a o l e v i e n a r v o j e n määrä , e l i n

n= l e n g t h ( a rvo ) ;

%Kesk ia rvo n k e s k i v i r h e on keskihajonta√

n

k e s k i v i r h e = k e s k i h a j o n t a / s q r t ( n ) ;

Kun olet tehnyt funktion siirry siihen hakemistoon mihin se on tallennettu ja koita,

että funktio toimii: Luodaan funktiolle annettavat arvot, 1000 satunnaislukua

d a t a = rand ( 1 0 0 0 , 1 ) ;

%K u t s u t a a n äsken t e h t y ä f u n k t i o t a k l u v u t k o m e n t o r i v i l t ä

% j a t a l l e n n e t a a n t u l o k s e t m u u t t u j i i n x , y j a z

[ x , y , z ]= k l u v u t ( d a t a )

8 Perusohjelmointi

8.1 Silmukka eli loop

Yksi lähes joka ohjelmassa tarvittava komponentti on silmukka eli ”loop”. Sil-

mukan sisällä olevat toiminnot toistetaan jokaisella ajokerralla. Silmukkaa tarvi-

taan esimerkiksi simuloinnissa tai jos halutaan suorittaa lukea monta tiedostoa

ohjelmaan ja analysoida ne samalla tavalla. Silmukka ajetaan niin monta kertaa,

Page 15: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

8.2 Ehtolauseet: if, else ja elseif 15

kunnes annettu pysäytysehto täyttyy. Yleensä toiminta saadaan suoritettua käyttä-

mällä for - looppia, joka ajaa komennot tietyn määrän kertoja. Lue lisää matlabin

ohjeesta.

%E s i m e r k k i a j e t a a n s i lmukka 10 k e r t a a , m u u t t u j a k e r t a s a a

% j o k a i s e l l a a j o k e r r a l l a uuden a r v o n . A jamal l a oh je lman

% s a a t k ä s i t y k s e n mi tä t a p a h t u u l o o p i s s a . .

%A l o i t e t a a n s i lmukka

f o r k e r t a =1:10

k e r t a

%Rakenne taan l o o p i l l a v e k t o r i , j o k a s a a a i n a a rvon k e r t a

%*2

v e k t o r i ( k e r t a ) = k e r t a *2

%L o p e t e t a a n s i lmukka

end

8.2 Ehtolauseet: if, else ja elseif

Silmukoiden lisäksi ohjelmissa tarvitaan usein ehtolauseita, joilla kontrolloidaan

tiettyjen käskyjen suorittamista. Ehtolauseet toteutetaan komennoilla if , else ja

elseif . if ja elseif komennot päätetään komennolla end. Yksinkertaisia esimerk-

kejä:

%b=3 j o s a >4

i f a >4

b=3

end

%b=3 j o s a >3 j a b=6 j o s a <2 , muussa t a p a u k s e s s a b=0

i f a >3

b=3

e l s e i f a <2

b=6

e l s e

b=0

end

end

Page 16: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

9 Tehtävien automatisointi eli ”Batch-mode” 16

9 Tehtävien automatisointi eli ”Batch-mode”

Usein mittauksissa kertyy suuri määrä samanlaisia tai lähes samanlaisia tiedostoja

joiden käsittely halutaan tehdä mahdollisimman automaattisesti. Tämä tapahtuu

tekemällä oma peräkkäisistä komennoista koostuva ohjelma, jolla voi vaikkapa

laskea kaikkien hakemistossa olevien tiedostojen keskiarvon.

Esimerkkinä käytän lehmän jalkapainomittauksesta saatua dataa, jonka voi ladata

internetistä http://files.mpastell.com/hdata.zip. Myös ao. koo-

di löytyy samasta zipistä nimellä ”hdata.m”. Data on saatu mittaamalla lehmän

jokaisen jalan painoa erikseen lypsyn aikana ja tiedosto koostuu neljästä sarak-

keesta, joista jokaisessa on yhden jalan paino. Esimerkissä lasketaan jokaisen ja-

lan keskipaino ja keskihajonta lehmän kokonaispaino, ja tallennetaan jokaisesta

tiedostosta kuvaaja erilliseen hakemistoon.

%D a t a s s a on o t s i k k o r i v i j a i t s e m i t t a u s t i e t o 7 : s s ä

% s a r a k k e e s s a . H a r j o i t u k s e s s a k ä y t e t ä ä n s a r a k k e i t a 2−5,

% j o i s s a on lehmän j o k a i s e n j a l a n p a i n o l y p s y n a i k a n a .

c l e a r ; c l c ;

%L ue taan k a i k k i hakemis to n t e k s t i t i e d o s t o t m u u t t u j a a n ` `

% t i e d o s t o t ` `

t i e d o s t o t = d i r ( ' * . t x t ' ) ;

%L a s k e t a a n t i e d o s t o j e n määrä j a l u o d a a n h a k e m i s t o k u v i l l e

maara = l e n g t h ( t i e d o s t o t ) ;

mkdir ( ' k u v a t ' )

%A j e t a a n s i lmukka , j o s s a k ä s i t e l l ä ä n k a i k k i h a k e m i s t o s s a

% o l e v a t t i e d o s t o t

f o r k e r t a =1: maara

%L uetaan s i lmukan a j o k e r r a n o s o i t t a m a t i e d o s t o

d a t a = dlmread ( t i e d o s t o t ( k e r t a ) .name , ' \ t ' , 1 , 0 ) ;

%V a l i t a a n k i i n n o s t u k s e n k o h t e e n a o l e v a s a r a k k e e t 2−5

d a t a = d a t a ( : , 2 : 5 ) ;

%L a s k e t a a n lehmän k o k o n a i s p a i n o j a l k a p a i n o j e n summana

d a t a ( : , 5 ) =sum ( da ta , 2 ) ;

%L a s k e t a a n t i e d o s t o n j o k a i s e n s a r a k k e e n k e s k i a r v o .

%Lopuksi m u u t t u j a s s a on k a i k k i e n t i e d o s t o j e n

% k e s k i a r v o t , j o k a i n e n omal la r i v i l l ä ä n .

k e s k i a r v o ( k e r t a , 1 : 5 ) =mean ( d a t a ) ;

%L a s k e t a a n k e s k i h a j o n t a

k e s k i h a j o n t a ( k e r t a , 1 : 5 ) = s t d ( d a t a ) ;

%P i i r r e t ä ä n k u v a a j a j a l i s ä t ä ä n s e l i t t e e t

p l o t ( d a t a )

x l a b e l ( ' measurement p o i n t ' )

Page 17: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

10 Sekalaisia vinkkejä 17

y l a b e l ( ' we igh t ( kg ) ' )

%T u l o s t e t a a n kuva png− t i e d o s t o o n .

p r i n t ( [ ' k u v a t / ' num2st r ( k e r t a ) ' . p n g ' ] , '−dpng ' )

end

10 Sekalaisia vinkkejä

Tämän otsikon alla on muutamia esimerkkiohjelmia ja mielestäni hyödyllisiä ko-

mentoja.Tämän osion esimerkkejä on kommentoitu vähemmän kuin alkuosaa, tar-

koituksena on myös että niitä soveltaessa pitää ymmärtää mitä tekee.

10.1 Hyödyllisiä komentoja

1. find komennolla voidaan etsiä vektorista tai matriisista kaikki tietyn ehdon

täyttävät arvot. Mielestäni hyödyllisin komento, säästää valtavasti laskenta-

aikaa jos käytetään loopin sijaan (Ks. seuraava kappale). Esim. haetaan

muuttujasta ”data”, kaikki yli 3*keskihajonta keskiarvosta poikkeavat ar-

vot ja poistetaan ne.

d a t a =[2 3 4 3 3 2 4 4 2 3 3 3 3 4 4 2 2 5 0 ] ;

sd = s t d ( d a t a ) ;

ka=mean ( d a t a ) ;

p o i s = f i n d ( da ta >ka +3* sd | da ta <ka−3*sd ) ;

d a t a ( p o i s ) = [ ] ;

2. diff ( data ) käsky laskee vektorin ”data” peräkkäisten elementtien välisen

erotuksen. Esimerkki seuraavassa kappaleessa.

3. tic ja toc komennot mittaavat komentojen välissä kulunutta aikaa. Lisää-

mällä komennot ohjelmaan alkuun ja loppuun saadaan selville ohjelman

suorittamisessa kulunut aika.

4. pause(1) lisää ohjelmaan 1 sekunnin mittaisen tauon.

5. sortrows (data ,[1 2]) järjestää matriisin rivit ensiin sarakkeen 1 mukaan ja

sitten sarakkeen 2 mukaan.

6. vektori (10)=[] poistaa vektorin 10:n elementin

7. [a b] yhdistää vektorit tai matriisit a ja b.

Page 18: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

10.2 Piikkien etsintä datasta 18

10.2 Piikkien etsintä datasta

Seuraavilla esimerkeillä lasketaan kuinka monta kertaa data ylittää tietyn raja-

arvon. Samalla tavalla laskea minkä tahansa piikkien määrää datassa. Laitoksella

samantyyppistä laskentaa on hyödynnetty mm. lehmän potkujen määrän laskemi-

seksi lypsyn aikana jalkapainodatasta1, 2 ja lehmän hengitystaajuuden laskennassa

lypsyn aikana.3

%L a s k e t a a n ku inka monta k e r t a a k u v a a j a y l i t t ä ä a rvon 0 . 2

c l e a r ; c l c ;

d a t a = s i n ( 0 : 0 . 1 : 5 0 ) ;

%Raja−a rvon y l i t t a v ä t p i s t e e t

p y l i = f i n d ( da ta >0 . 2 ) ;

%K e r r a t j o l l o i n r a j a −a rvo y l i t e t ä ä n

y l i = f i n d ( d i f f ( p y l i ) >1) ;

k e r r a t = l e n g t h ( y l i ) ;

%Ensimmäinen k e r t a j ä ä l a s k e m a t t a j o s a l k u a r v o <0 . 2 ;

i f d a t a ( 1 ) <0 . 2 k e r r a t = k e r r a t +1; end

p l o t ( d a t a )

t i t l e ( [ ' Ohjelma l a s k i ' num2st r ( k e r r a t ) ' y l i t y s t ä . ' ] )

Rajan ylitykset voi laskea myös hyödyntämällä pelkästään find käskyä. Ohjelma

on myös helpohkosti muokattavissa huippujen haku ohjelmaksi:

%L a s k e t a a n ku inka monta k e r t a a k u v a a j a y l i t t ä ä a rvon 0 . 2

c l e a r ; c l c ;

d a t a = s i n ( 0 : 0 . 1 : 5 0 ) ;

d a t a 2 ( 2 : l e n g t h ( d a t a ) +1) = d a t a ;

d a t a ( l e n g t h ( d a t a ) +1) =NaN ;

y l i = f i n d ( da ta >0 . 2 & d a t a 2 ≤0 . 2 ) ;

k e r r a t = l e n g t h ( y l i ) ;

y ( 1 : k e r r a t ) =0 . 2 ;

p l o t ( d a t a ) ;

ho ld on

p l o t ( y l i , y , ' * r ' ) ;

t i t l e ( ' Y l i t y s = puna inen * ' )

Page 19: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

10.3 Tekstitiedostojen muunto *.mat formaattiin 19

0 100 200 300 400 500−1

−0.5

0

0.5

1Ylitys = punainen *

10.3 Tekstitiedostojen muunto *.mat formaattiin

Joskus on hyödyllistä muuntaa ASCII - muotoista (txt) dataa Matlabin omaan

dataformaattiin. Tähän on 2 syytä: tiedostot vievät paljon vähemmän tilaa ja au-

keavat ohjelmissa suunnattoman paljon nopeammin. Alla oleva ohjelma muuntaa

kaikki hakemistossa olevat *.txt tiedostot *.mat tiedostoiksi säilyttäen tiedostoni-

men muuten ennallaan. Uuteen *.mat tiedostoon tallennnetaan tiedostossa oleva

data muuttujaan ”data” ja tiedoston tallennuspäivämäärä muuttujaan ”date”.

c l c ; c l e a r ;

%L i s t a t a a n hakemis to n * . t x t t i e d o s t o t s t r u k t u u r i i n f i l e s

f i l e s = d i r ( ' * . t x t ' ) ;

t lkm = s i z e ( f i l e s , 1 )

f o r i =1: t lkm

%K ä y t e t ä ä n dlmread komentoa , j o s d a t a s s a on

% o t s i k k o r i v i , l o a d komentoa j o s e i o l e ( k ä y t t ä j ä

% v a l i t s e e ) .

%d a t a =dlmread ( f i l e s ( i ) .name , ' \ t ' , 1 , 0 ) ;

d a t a = l o a d ( f i l e s ( i ) .name ) ;

d a t e = f i l e s ( i ) . d a t e ;

n imi = s t r r e p ( f i l e s ( i ) .name , ' t x t ' , ' mat ' ) ;

save ( nimi , ' d a t a ' , ' d a t e ' )

end

Page 20: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

10.4 Matlabin dialogit 20

10.4 Matlabin dialogit

Matlabin ohjelmiin voi lisätä myös mm. graafisia dialogeja, joilla voidaan esimer-

kiksi seurata silmukan edistymistä (tämä on joskus mukava ominaisuus hieman

enemmän aikaa vievässä ohjelmassa) tai valita avattava/tallennettava tiedosto. Li-

sätietoa löytyy Matlabin helpistä kohdasta ”Predefined Dialog Boxes”. Esimerk-

kiohjelma luo silmukan edistymistä seuraavaan näytön.

%E s i m e r k k i ' w a i t b a r ' k ä s k y s t ä .

h= w a i t b a r ( 0 , ' O d o t a . . . ' ) ;

f o r i =1:100

pause (0 . 1 )

w a i t b a r ( 1 / 1 0 0 )

end

c l o s e ( h )

11 Signaalin käsittely

11.1 FFT - taajuuden etsintä signaalista

FFT (Fast Fourier Transform) on laskentamenetelmä, jolla voidaan laskea sig-

naalissa esiintyvien taajuuksien voimakkuus. Alla esimerkki FFT:n laskemisesta

Matlabilla.

c l e a r ; c l c ;

%FFT : l l ä v o i d a a n l a s k e a e r i t a a j u u k s i e n voimakkuus

% s i g n a a l i s s a . Tämä on e s i m e r k k i FFT : n k ä y t ö s t ä

% M a t l a b i s s a . D a t a p i s t e e t 512 kpl , m i t t a u s t a a j u u s 100 hz

d a t a = ( 0 : 0 . 1 : 5 1 . 1 ) ;

%Luodaan h ä i r i ö t ä d a t a a n

n o i s e = randn ( 1 , 5 1 2 ) ;

%L i s ä t ä ä n h ä i r i ö s i n ( d a t a a n )

h d a t a = s i n ( d a t a ) + n o i s e / 5 ;

p l o t ( da ta , h d a t a )

%Merk innä t j a a k s e l i e n r a j a t

t i t l e ( ' Data ' )

x l a b e l ( ' Aika ' )

y l a b e l ( ' Voimakkuus ' )

%L a s k e t a a n DFT h ä i r i ö l l i s e s t ä d a t a s t a f f t f u n k t i o l l a

Y = f f t ( hda ta , 5 1 2 ) ;

Page 21: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

12 Neuroverkot 21

%L a s k e t a a n power s p e c t r a l d e n s i t y e l i e r i t a a j u u k s i e n

%voimakkuus s i g n a a l i s s a

Pyy = Y.* c o n j (Y) / 512 ;

%A i n o a s t a a n e n s i m m ä i s i l l ä 257 p i s t e e l l ä on m e r k i t y s t ä .

% L a s k e t a a n t a a j u u s v e k t o r i e l i t a a j u u s / f f t : n p i s t e i d e n

%määrä

f = 1 0 0 * ( 0 : 2 5 6 ) / 5 1 2 ;

%P l o t a t a a n f f t : n t u l o s u u t e e n kuvaan

f i g u r e

p l o t ( f , Pyy ( 1 : 2 5 7 ) )

x l a b e l ( ' T a a j u u s ( hz ) ' )

y l a b e l ( ' Voimakkuus ( dB ) ' )

t i t l e ( ' FFT : n t u l o s ' )

0 20 40 60

−1

0

1

Data

Aika

Vo

ima

kku

us

0 10 20 30 40 500

50

100

Taajuus (hz)

Vo

ima

kku

us (

dB

)

FFT:n tulos

12 Neuroverkot

Tämän ja seuraavan kappaleen tarkoituksena on osoittaa, että hienojen termien

”Neuroverkko” ja ”Sumea logiikka” toteutus onnistuu ilman mitään toolboxeja ja

melko yksinkertaisilla laskutoimituksilla. Mallien toimintaan perehtyminen kir-

jallisuuden perusteella voi olla aluksi vaikeaa, koska niissä käytetään paljon omaa

terminologiaa ja sinällänsä helpoille laskutoimituksille on annettu hienot nimet.

Toivottavasti nämä yksinkertaiset esimerkit hieman selventävät asiaa.

12.1 Probabilistic Neural Network

Probabilistic Neural Network (PNN) on neuroverkkomalli, joka luokittelee uusia

vektoreita opetusdatan perusteella. Malli säilyttää koko opetusdatan toisin kuin

monet muut samaan tarkoitukseen kehitetyt NV-mallit. Esimerkki mallin toimin-

nasta:

Page 22: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

12.1 Probabilistic Neural Network 22

%PNN k a h d e l l a l u o k i t u k s e l l a t ä s s ä e s i m e r k i s s ä

% o p e t u s d a t a n a o v a t

%k e k s i t y t a j a b , mut t a ne v o i d a a n h e l p o s t i k o r v a t a

% o i k e a l l a

%m i t t a u s d a t a l l a . O p e t u s d a t a n r i v e i l l ä on e s i m e r k i s s ä v a i n

% 2 arvoa ,

%koska se on h e l p o i n t a e s i t t ä ä g r a a f i s e s t i . Arvo ja v o i

% k u i t e n k i n

%l i s ä t ä l ä h e s r a j a t t a . M a l l i n t o i m i n t a a s ä ä d e t ä ä n

% m u u t t a m a l l a

%s p r e a d i n =s a r v o a

c l e a r ; c l c ;

%O p e t u s d a t a a j a b=PNN: n 2 l u o k k a a

a =[1 2 ; 2 1 2 ; 5 6 ; 7 8]

b =[1 7 ; 22 4 ; 5 2 ; 7 10]

%s on smooth ing p a r a m e t e r ( s p r e a d )

s =0 . 2 ;

%c on l u o k i l t e l t a v a v e k t o r i

c =[6 10]

%L a s k e t a a n e t ä i s y y d e t molempien l u o k k i e n j o k a i s e e n

%v e k t o r i i n (= r i v i i n )

f o r i =1: l e n g t h ( a ) ;

e t a ( i ) = s q r t ( sum ( ( a ( i , : )−c ) . ^ 2) )

e t b ( i ) = s q r t ( sum ( ( b ( i , : )−c ) . ^ 2) )

end

%R a d i a l b a s i s a c t i v a t i o n f u n c t i o n s a a a rvon 1 , kun

% e t ä i s y y s on 0 j a muul lo in <1 . A k t i v o i n t i f u n k t i o n "

% l e v e y s " r i i p p u u s : n a r v o s t a .

r b a =exp (− s * e t a . * e t a )

rbb =exp (− s * e t b . * e t b )

%L a s k e t a a n k a i k k i e n r a d i a l b a s i s f u n k t i o i d e n summa

%molemmil le l u o k i l l e

f a x =sum ( r b a )

fbx =sum ( rbb )

%P l o t a t a a n v e k t o r i t v a l i t a a n i sompi luokka j a n ä y t e t ä ä n

%se k u v a s s a

p l o t ( a ( : , 1 ) , a ( : , 2 ) , ' s q u a r e b l a c k ' )

ho ld on

p l o t ( b ( : , 1 ) , b ( : , 2 ) , ' +b ' )

p l o t ( c ( : , 1 ) , c ( : , 2 ) , ' * r ' )

l e g e n d ( ' l uokka a ' , ' l uokka b ' , ' u u s i ' )

Page 23: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

13 Sumea Logiikka 23

%L u o k i t u k s e n v a l i n t a

i f fax > fbx

t i t l e ( ' V e k t o r i kuu luu luokkaan A ' )

e l s e

t i t l e ( ' V e k t o r i kuu luu luokkaa n B ' )

end

ho ld o f f

0 5 10 15 20 250

2

4

6

8

10

12

14Vektori kuuluu luokkaan B

luokka a

luokka b

uusi

13 Sumea Logiikka

Tämä on tarkoitettu esimerkiksi laskennasta sumean logiikan idean tunteville. En-

sin tehdään gaussinen jäsenyysfunktio gausf.m ja sitten lasketaan yksinkertainen

esimerkki sumeasta mallista. Mallissa on kolme jäsenyysfunktiota ja kaikilla jä-

senyysfunktioilla on mallissa yhtä suuri paino.

Gaussinen jäsenyysfunktio: f(x) = e−(x−c)

2σ2

%J ä s e n y y s f u n k t i o gausf .m , c=jakauman k e s k i p i s t e , s=

% h a j o n t a e l i sigma , x on u u s i p i s t e

f u n c t i o n mf = g a u s f ( x , c , s )

mf=exp (−(x−c ) . ^ 2 / ( 2 * s ^ 2) ) ;

Seuraavaksi malli:

%Luodaan sumea m a l l i , j o s s a on kolme g a u s s i s t a

% j ä s e n y y s f u n k t i o t a . c= f u n k t i o n k e s k i p i s t e j a s= h a j o n t a

Page 24: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

13 Sumea Logiikka 24

% j a a= t u l o s , kun kuuluu f u n k t i o o n j ä s e n y y s a s t e e l l a 1 .

%Lopuksi l a s k e t a a n p i s t e e n p arvo m a l l i l l a

c l c ; c l e a r ;

%M ä ä r i t e l l ä ä n j ä s e n y y s f u n k t i o t

c1 =4; s1 =2; a1 =1;

c2 =10; s2 =2 . 6 ; a2 =2;

c3 =15; s3 =2; a3 =3;

%P i i r r e t ä ä n k u v a a j a t

p i s t e e t =−8:0 . 1 : 8 ;

mf1= g a u s f ( c1+ p i s t e e t , c1 , s1 ) ;

mf2= g a u s f ( c2+ p i s t e e t , c2 , s2 ) ;

mf3= g a u s f ( c3+ p i s t e e t , c3 , s3 ) ;

p l o t ( p i s t e e t +c1 , mf1 , ' b ' ) ;

ho ld on

p l o t ( p i s t e e t +c2 , mf2 , ' r ' ) ;

p l o t ( p i s t e e t +c3 , mf3 , ' g ' ) ;

%L a s k e t a a n p i s t e e n p arvo j a p i i r r e t ä ä n j ä s e n y y s a s t e e t

%kuvaan

p =8;

j 1 = g a u s f ( p , c1 , s1 ) ;

j 2 = g a u s f ( p , c2 , s2 ) ;

j 3 = g a u s f ( p , c3 , s3 ) ;

p l o t ( p , j1 , ' *b ' )

p l o t ( p , j2 , ' x r ' )

p l o t ( p , j3 , ' og ' )

t u l o s = j 1 * a1+ j 2 * a2+ j 3 * a3 ;

ho ld o f f

t i t l e ( [ ' T u los = ' num2st r ( t u l o s ) ] )

−5 0 5 10 15 20 250

0.2

0.4

0.6

0.8

1Tulos= 1.6297

Page 25: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

VIITTEET 25

Viitteet

[1] Pastell, M., H. Takko, H. Grohn, M. Hautala, V. Poikalainen,

J. Praks, I. Veermae, M. Kujala and J. Ahokas. 2006. Asses-

sing cows’ welfare: Weighing the cow in a milking robot. Bio-

systems Engineering. 93:81-87.

[2] Pastell, M., H. Takko, H. Grohn, M. Hautala, V. Poikalainen,

J. Praks, I. Veermae, M. Kujala and J. Ahokas. 2006. Asses-

sing cows’ welfare: Weighing the cow in a milking robot. Bio-

systems Engineering. 93:81-87.

[3] Pastell, M., A. M. Aisla, M. Hautala, J. Ahokas, V. Poika-

lainen, J. Praks and I. Veermae. 2006. Automatic cow health

measurement system in a milking robot. in ASABE annual

international meeting, Portland, USA.

Page 26: MATLAB OPAS - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · MATLAB OPAS Matti Pastell matti.pastell@helsinki.fi Maataloustieteiden laitos, Helsingin Yliopisto 11. tammikuuta

Hakemisto

array, 6

clear, 5

desimaalierotin, 11

dialogi, 20

dlmread, 11

dlmwrite, 12

ehtolause, 15

else,elseif, 15

excel, 11

export setup, 8, 10

fft, 20

find, 17

for, 15

funktio, 12, 13

argumentti, 13

if, 15

import wizard, 11

kalibrointikerroin, 7

komentorivi, 5

kuvaaja, 8

load, 11

m-file, 12

mat formaatti, 19

mat tiedostot, 12

matriisi, 6

mean, 7

muuttuja, 5

plot tools, 8, 10

save, 12

silmukka, 14

skripti, 12

std, 7

toolbox, 4

Unix tunnus, 5

vektori, 6

who, 5

xlsread, 11

xlswrite, 12