matlab opas - papers.mpastell.compapers.mpastell.com/matlab_opas.pdf · matlab opas matti pastell...
TRANSCRIPT
MATLAB OPAS
Matti Pastell
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
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
SISÄLTÖ 3
Viitteet 25
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
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
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 )
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.
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
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)
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-
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
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
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
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,
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
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 ' )
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.
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 * ' )
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
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 ) ;
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:
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 ' )
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
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
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.
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