matemaattisia funktioita - oamkjjauhiai/opetus/sovellusohjelmat/matlab... · 2008. 1. 25. ·...
TRANSCRIPT
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Matemaattisia funktioita
Funktio Toiminta
max(X)
Vektorin X suurin luku. Matriiseille hakee suurimman luvun j jokaiselta matriisin sarakkeelta.
max(X,[],DIM) DIM = 1 Laskee summan sarakkeilta (oletus, voi jättää pois)
DIM = 2 Laskee summan riveiltä
min(X)
Vektorin X pienin luku. Matriiseille hakee pienimmän luvun jokaiselta matriisin sarakkeelta
min(X,[],DIM) DIM = Lasketaan joko sarakkeittain (1) tai riveittäin (2)
round(X) Pyöristys lähimpään kokonaislukuun
ceil(X) Pyöristys kohti + ääretöntä
floor(X) Pyöristys kohti - ääretöntä
fix(X) Pyöristys kohti nollaa
abs(X) Itseisarvo
sum(X) Vektorin X alkioiden summa
sum(X,DIM) DIM = Lasketaan joko sarakkeittain (1) tai riveittäin (2)
cumsum(X) Vektorin X alkioiden kumulatiivinen summa
cumsum(X,DIM) DIM = Lasketaan joko sarakkeittain (1) tai riveittäin (2)
prod(X) Vektorin X alkioiden tulo
prod(X,DIM) DIM = Lasketaan joko sarakkeittain (1) tai riveittäin (2)
cumprod(X) Vektorin X alkioiden kumulatiivinen tulo
cumprod(X,DIM) DIM = Lasketaan joko sarakkeittain (1) tai riveittäin (2)
diff(X) Vektoreille [X(2)-X(1) X(3)-X(2) … X(n)-X(n-1)]
Matriiseille [X(2:n,:) - X(1:n-1,:)]
diff(X,N) N:n kertaluvun erotus
diff(X,N,DIM)
mean(X) Vektorin X alkioiden keskiarvo. Matriiseille laskee jokaisen sarakkeen keskiarvon.
mean(X,DIM) DIM = Lasketaan joko sarakkeittain (1) tai riveittäin (2)
median(X) Vektorin X alkioiden mediaani eli keskimmäinen luku lajitellusta lukujoukosta.
Matriiseille laskee mediaanin jokaiselta sarakkeelta.
mean(X,DIM) DIM = Lasketaan joko sarakkeittain (1) tai riveittäin (2)
std(X) Vektorin X keskihajonta. Matriiseille keskihajonta sarakkeittain.
std(X,W,DIM) DIM = Lasketaanjoko sarakkeittain (1) tai riveittäin (2)
W = 0 Käytetään normalisoinnissa kerrointa N-1 (oletus)
W = 1 Käytetään normalisoinnissa kerrointa N
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
var(X) Vektorin X varianssi (keskihajonnan neliö, ks. Syntaksi edellä)
var(X,W,DIM)
sort(X) Lajittelee vektorin X alkiot kasvavaan järjestykseen. Y =
sort(X,DIM,MODE) DIM = Lajitellaan joko sarakkeittain (1) tai riveittäin (2)
MODE = 'ascend', nousevaan järjestykseen
MODE = 'descend' laskevaan järjestykseen
Y = Lajiteltu vektori
rand(N) NxN kokoinen matriisi satunnaislukuja väliltä (0.0, 1.0)
rand(1,N) N alkion mittainen vaakavektori satunnaislukuja
rand(M,N) MxN kokoinen matriisi satunnaislukuja
rand (ilman argumentteja) Yksi satunnaisluku. Arvo vaihtuu joka kutsukerralla
>> a=[3 4 2 5 9];
>> sort(a)
ans =
2 3 4 5 9
>> sort(a,'descend')
ans =
9 5 4 3 2
>> mean(a)
ans =
4.6000
>> median(a)
ans =
4
>> cumsum(a)
ans =
3 7 9 14 23
>> cumprod(a)
ans =
3 12 24 120 1080
>> diff(a)
ans =
1 -2 3 4
Tehtävä: Tee 4x4-kokoinen satunnaislukumatriisi X, joka sisältää kokonaislukuarvoja
väliltä 0 – 100.
Tehtävä: Laske edellisen tehtävän matriisin X alkioitten summa
a) Riveittäin b) Sarakkeittain c) Koko matriisin alkioiden summa
Tehtävä: Talletan matriisin X alkiot 16 alkion mittaiseen vaakavektoriin Y ja lajittele
alkiot järjestykseen suurimmasta pienimpään.
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Tehtävä: Laske positiivisen kokonaisluvun n kertoma n!=1*2*3*4*..n
Tietotyypit
Matlabissa on käytössä seuraavat tietotyypit:
double - double precision.
char - character array (string).
logical - logical (true / false, 0 / 1)
cell - cell array.
struct - struct data type
class - class data type
single - single precision.
uint8 - 8-bit integer.
uint16 - 16-bit integer.
uint32 - unsigned 32-bit integer.
uint64 - unsigned 64-bit integer.
int8 - signed 8-bit integer.
int16 - signed 16-bit integer.
int32 - signed 32-bit integer.
int64 - signed 64-bit integer. inline - INLINE object.
function_handle - Function handle array.
Perustietotyypit
Numeerisen tiedon oletustyyppi on double. Kaksoistarkkuuden luvuilla laskeminen on
hidasta. Kannattaa muuttaa data kokonaislukutyypiksi jos se on suinkin mahdollista,
kuten esimerkiksi DSP-sovelluksissa. Toisaalta läheskään kaikki Matlabin funktiot eivät
toimi kokonaislukutyypeille. Matlabissa muuttujan tyyppiä ei tarvitse määritellä kuten C-
kielessä. Matlab toimii niin, että ns. komentotulkki tulkitsee käyttäjän syöttämät
muuttujat oletustietotyyppeihin ja tunnistaa luvut sekä merkit. Esimerkki muunnoksesta
(Matlabin kommenttimerkki on %):
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
>>%a on tyyppiä double
>>a=1;
>>%a on 8-bittinen etumerkitön kokonaisluku:
>>a=uint8(a);
>>sqrt(a)
??? Function 'sqrt' is not defined for values of class 'uint8'.
Error in ==> sqrt at 13
builtin('sqrt', varargin{:});
Siis esimerkiksi neliöjuurta ei voi ottaa kokonaisluvusta.
Merkkijonot
Matlabin merkkijono on vektori, joka sisältää merkkejä:
>> s='merkkijono'
s =
merkkijono
Merkkijonojen käsittely
Merkkijonojen käsittelyyn on käytössä komennot:
String Manipulation
deblank Strip trailing blanks from the end of a string
findstr Find one string within another
lower Convert string to lower case
strcat String concatenation
strcmp Compare strings
strcmpi Compare strings ignoring case
strjust Justify a character array
strmatch Find possible matches for a string
strncmp Compare the first n characters of two strings
strrep String search and replace
strtok First token in string
strvcat Vertical concatenation of strings
symvar Determine symbolic variables in an expression
texlabel Produce the TeX format from a character string
upper Convert string to upper case
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Muutama esimerkki:
>> s='aku'
s =
aku
>> q='ankka'
q =
ankka
>> strcat(s,q)
ans =
akuankka
>> p=strcat(s,q)
p =
akuankka
>> strtok(p,'u')
ans =
ak
>> findstr(p,'uan')
ans =
3
>> strcmp(s,q)
ans =
0
>> strrep(p,'aku','roope')
ans =
roopeankka
>> strrep(p,'aku','roope')
ans =
roopeankka
Merkkijonon muunnokset
Merkkijono voidaan muuttaa numeeriseksi tiedoksi ja päinvastoin.
String to Numeric
base2dec Convert base N number string to decimal number
bin2dec Convert binary number string to decimal number
hex2dec Convert hexadecimal number string to decimal number
hex2num Convert hexadecimal number string to double number
str2double Convert string to double-precision number
str2num Convert string to number
Numeric to String
char Convert to character array (string)
dec2base Convert decimal to base N number in string
dec2bin Convert decimal to binary number in string
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
dec2hex Convert decimal to hexadecimal number in string
int2str Convert integer to string
mat2str Convert a matrix to string
num2str Convert number to string
Muunnos merkkijonosta kaksoistarkkuuden liukuluvuksi:
>> s='3.141592';
>> whos
Name Size Bytes Class
s 1x8 16 char array
Grand total is 8 elements using 16 bytes
>> s=str2num(s)
s =
3.1416
>> whos
Name Size Bytes Class
s 1x1 8 double array
Grand total is 1 element using 8 bytes
Komento whos näyttää sillä hetkellä käytössä olevien muuttujien nimet, koot ja
tietotyypit. Sama tieto on näkyvillä Workspace-ikkunassa.
Merkkijonon pituus voidaan määrittää komennoilla length tai size, jotka laskevat
minkä tahansa vektorin pituuden.
Tehtävä: Muuta piin likiarvo merkkijonoksi.käyttämällä Matlabin sisäistä vakiota pi ja
määritä tuloksena saadun merkkijonon pituus.
Tietue
Tietue koostuu kentistä, joilla on tietty tyyppi ja arvo. Tietueen kenttiin viitataan
pisteoperaattorilla (.).
Luodaan kahden alkion mittainen tietuetaulukko s, joka sisältää kolme kenttää type,
color ja x. type-kenttä voi saada arvot ’big’ ja ’little’. Kenttä color voi
saada ainoastaan arvon ’red’. Kenttä x voi saada arvot 3 tai 4.
s = struct('type',{'big','little'},'color',{'red'},'x',{3 4})
Tulostuu: s =
1x2 struct array with fields:
type
color
x
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Tietuetaulukon alkioihin viitataan antamalla taulukon indeksi tavallisissa suluissa
(samalla lailla kuin viitattiin vektorin alkioihin):
>>s(1)
ans =
type: 'big'
color: 'red'
x: 3
>>s(2)
ans =
type: 'little'
color: 'red'
x: 4
Tietuetaulukkoon voidaan helposti lisätä uusia alkioita:
>> s(3).type='tiny';s(3).color='blue';s(3).x=5;
>> s(3)
ans =
type: 'tiny'
color: 'blue'
x: 5
Matlab tukee versiosta 7 alkaen oliopohjaista ohjelmointia. Kieleen on lisätty
luokkatyyppi class. Jätetään tämä kuitenkin tällä kurssilla käsittelemättä.
Tehtävä: Toteuta oheisen kuvan mukainen tietue.
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Operaattorit
Matlab sisältää seuraavat operaattorit. Huomaa, että kerto-, jako-, ja
potenssiinkorotuksissa on määritelty erikseen operaattorit matriisioperaatioille ja
alkioittaisille operaatioille.
Arithmetic operators. plus - Plus + minus - Minus - mtimes - Matrix multiply * times - Array multiply .* mpower - Matrix power ^ power - Array power .^ mldivide - Backslash or left matrix divide \ mrdivide - Slash or right matrix divide / ldivide - Left array divide .\ rdivide - Right array divide ./ kron - Kronecker tensor product kron
Relational operators. eq - Equal == ne - Not equal ~= lt - Less than < gt - Greater than > le - Less than or equal =
Logical operators. and - Logical AND (for vectors) & or - Logical OR (for vectors) |
and - Logical AND (for scalars) && or - Logical OR (for scalars) ||
not - Logical NOT ~ xor - Logical EXCLUSIVE OR any - True if any element of vector is nonzero all - True if all elements of vector are nonzero
Vertailu- ja loogisten operaattoreiden syntaksi on hieman erilainen kuin mihin C-kielessä
on totuttu. Esimerkiksi erisuuruusvertailu tehdään ~= operaattorilla. Loogisissa
operaatioissa on vain yksi & ja | jos verrataan taulukoita alkioittain. Jos verrataan
skalaareja eli yksittäisiä lukuja, käytetään && ja ||. Vertailuoperaattorit palauttavat
totuusarvon 0 (false) tai 1 (true):
>> 1 == 2
ans =
0
>> 1 < 2
ans =
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
1
>> 1 ~= 2
ans =
1
>> 1 >= 2
ans =
0
>> false
ans =
0
>> true
ans =
1
Loogisia operaattoreita voidaan käyttää valitsemaan vektorista alkiot, jotka toteuttavat
tietyn ehdon. Esimerkiksi seuraava esimerkki valitsee vektorista a kaikki alkiot, joiden
arvo on 1 ja sijoittaa ne uuteen vektoriin b. Vektori ind sisältää totuusarvon tosi tai
epätosi sen mukaan oliko vertailtava ehto tosi vai epätosi.
>> a=[1 2 4 1 5]
a =
1 2 4 1 5
>> ind=(a==1)
ind =
1 0 0 1 0
>> b=a(ind)
b =
1 1
Tehtävä: Vektori X sisältää alkiot -10 5 0 2 8 4 3 9 -5. Laske vektorin positiivisten ja
negatiivisten alkioiden summat.
Sitten esimerkki loogisista operaattoreista:
>> a=logical([1 1 0 0 1])
a =
1 1 0 0 1
>> b=logical([1 0 0 1 1])
b =
1 0 0 1 1
>> a&b
ans =
1 0 0 0 1
>> a | b
ans =
1 1 0 1 1
>> ~a
ans =
0 0 1 1 0
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
>> xor(a,b)
ans =
0 1 0 1 0
>> any(a)
ans =
1
>> all(a)
ans =
0
>> a && b
??? Operands to the || and && operators must be convertible to
logical scalar values.
>> (2 > 1) && (3 > 4)
ans =
0
>> (2 > 1) || (3 > 4)
ans =
1
Tehtävä: Täytä vektori sadalla satunnaislukuarvoilla väliltä 0 – 1. Laske niiden lukujen
määrä jotka ovat välillä 0.3 – 0.7.
Kuvaajien piirto
Kaksiulotteiset kuvaajat
Kaksiulotteisia kuvaajia voidaan piirtää näytölle mm. komennoilla plot, stem,
bar, hist tai stairs.
plot
Esimerkki: Piirretään sini- ja kosinifunktion tulo välillä 0 -> 2π. Määritellään x-akseli >>x=[0:0.1:2*pi] ;
>>y=sin(x);
>>plot(x,y)
Kuvaajaan voidaan lisätä akselien nimet ja otsikko:
>>xlabel('x = 0:2\pi')
>>ylabel('sin(x)')
>>title('Sinifunktion kuvaaja','FontSize',12)
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Seuraava plot-komento hävittää edellisen tulostuksen plot-ikkunasta ja tulostaa uuden
kuvaajan: >>y=cos(x)
>>plot(x,y,'.')
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Kannattaa huomata, että tästä tulostuksesta on hävinnyt akselit ja otsikko. Se on täysin
uusi kuvaaja. Komennon kolmas argumentti ’.’ määrittää tulostustyypin, joka tässä
tapauksessa on piste (.). Plot-komennon helpistä löytyy täydellinen lista eri
muotoiluvaihtoehdoista.
Monesti halutaan tulostaa useampi kuvaaja yhteen kuvaan. Tämä voidaan tehdä
määrittelemällä hold on
Seuraavat komennot tulostavat sinin ja kosinin kuvaajat samaan kuvaan:
>>x = 0:pi/100:2*pi;
>>y = sin(x);
>>plot(x,y)
>>xlabel('x')
>>ylabel('f(x)')
>>title('Funktion f(x) kuvaaja','FontSize',12)
>>y=cos(x)
>>hold on
>>plot(x,y,'.')
Samaan ikkunaan piirrellään niin kauan kuin hold-asetus on päällä. Se voidaan poistaa
komennolla
>>hold off
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Jolloin seuraava plot komento tyhjentää edelliset tulostukset.
Jos halutaan luoda uusi tulostusikkuna siten, että entinen jää näkyviin eikä kirjoiteta sen
päälle, voidaan antaa komento >>figure
Tulostetaan uuteen plot-ikkunaan (Figure 2) sinin ja kosinin tulo:
>>plot(x,sin(x).*cos(x))
>>title('Funktion f(x) kuvaaja','FontSize',12)
>>xlabel('x')
>>ylabel('sin(x)*cos(x)')
Figure 2 on nyt aktiivinen. Jos halutaan vaihtaa takaisin Figure 1:een, annetaan figure-
komento ja kuvaikkunan numero:
>>figure(1)
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Nähdään, että Figure 1 tyhjentyi. Siihen voi taas tulostaa jotain.
Yhteen ikkunaan voidaan tulostaa useampi kuvaaja käyttämällä subplot-komentoa.
Komennon yleinen muoto on:
subplot(m,n,p)
m = rivien lukumäärä
n = sarakkeiden lukumäärä
p = aktiivisen ikkunan numero, lasketaan vasemmalta oikealle ja ylhäältä alas
>>subplot(2,3,1);
>>plot(x,sin(x));
>>subplot(2,3,2);
>>plot(x,sin(2*x));
>>subplot(2,3,3);
>>plot(x,cos(x));
>>subplot(2,3,4);
>>plot(x,cos(x/2));
>>subplot(2,3,5);
>>plot(x,cos(x).*sin(x));
>>subplot(2,3,6);
>>plot(x,cos(x).*sin(2*x));
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Tehtävä: Piirrä seuraavien funktioiden kuvaajat omiin ikkunoihinsa.
a. exp(-x²) b. ln(x²+x+1) c. x sin(2x²+1) d. exp(sin(3x)) - 1
Tehtävä: Piirrä edellisen tehtävän funktiot yhteen ikkunaan käyttäen subplot-komentoa.
Lisää kuhunkin kuvaajaan otsikoksi piirrettävän funktion matemaattinen kaava.
Tehtävä: Piirrä funktion f(x) = sin(1/x)
kuvaaja välillä 0.01
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
plotyy = Tulostaa kaksi kuvaajaa, joista toisen arvot vasemmalla y-akselilla ja toisen
arvot oikealla y-akselilla
plot3 = 3-ulotteinen (x,y,z) plot
grid = gridlines eli akselien viivoitus kuvaajan sisälle
scatter = scatter-plot. Sama kuin plot(x,y,’o’)
stem
Käytetään yleensä diskreettien signaalien
kuvaajien piirrossa. Stem piirtää
pystyviivan, jonka päässä on ympyrä:
>>x=[0:0.5:2*pi];
>>stem(x,sin(x))
bar
Pylväsdiagrammi, oletus pystysuuntaan.
Yhteen liittyvä data annetaan
matriisimuodossa:
>>x=[10 20 30 40 50 60
55 44 87 94 34 34]
x =
10 20 30 40 50
60
55 44 87 94 34
34
>>bar(x)
bar-komentoon liittyviä komentoja:
barh = Horisontaalinen pylväsdiagrammi
bar3 = 3-ulotteinen pylväsdiagrammi
(vertikaalinen)
bar3h = 3- ulotteinen pylväsdiagrammi
(horisontaalinen)
hist
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Histogrammi kuvaa, kuinka monta kertaa arvo tietyltä määritellyltä väliltä esiintyy
lukujoukossa. Esimerkiksi satunnaislukujen arvonta. Arvotaan 100, 1000 ja 10 000
satunnaislukua väliltä 0 – 1, lajitellaan 100 luokkaan ja piirretään luvuista histogrammi:
>>x=rand(1,100);
>>subplot(3,1,1)
>>title('N=100');
>>hist(x,100)
>>x=rand(1,1000);
>>subplot(3,1,2)
>>title('N=1000');
>>hist(x,100)
>>x=rand(1,10000);
>>subplot(3,1,3)
>>hist(x,100)
>>title('N=10000');
Tehtävä: Oheisessa taulukossa on luokan HYV6SN Olio-ohjelmoinnin kurssin
arvosanat. Piirrä arvosanojen jakauma käyttäen Matlabin histogrammia. Lisää
histogrammiin otsikko ja nimeä akselit..
Arvosanat: 4 4 3 3 0 1 0 3 0 4 2 1 0 5 4 1 4 1 2 0
Kolmiulotteisten pintojen piirto (Mesh and surface plots)
Matlab määrittelee kolmiulotteisen pinnan siten, x- ja y-akselien arvot muodostavat
tasohilan (meshgrid), jonka päälle z-koordinaatti koodataan.
mesh
Oheinen esimerkki tulostaa 3-ulotteisen sinc-funktion kuvaajan käyttäen mesh-
komentoa. (HUOM: sinc(x)=sin(x)/x)
>>[X,Y] = meshgrid(-20:.5:20);
>>R = sqrt(X.^2 + Y.^2) + eps;
>>Z = sin(R)./R;
>>mesh(X,Y,Z,'EdgeColor','black')
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
• meshgrid muuntaa argumenttina annetun vektorin kaksiulotteiseksi tasohilaksi.
• R on euklidinen etäisyys hilan keskeltä
• eps on ns. kone-epsilon, eli liukuluvun tarkkuus käytetyssä järjestelmässä
surf
Surface plot surf eli pintatulostus tulostaa samalla periaatteella kuin mesh. Erona on,
että pinnan muodostavat suunnikkaat värjätään eri väreillä riippuen z:n arvosta. Oheiset
komennot tulostavat edellisen esimerkin sinc-funktion kuvaajan käyttäen hsv-värimallia.
Lisäksi colorbar-komento esittää käytetyn värikoodauksen:
>>surf(X,Y,Z)
>>colormap hsv
>>colorbar
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Kuvaan voidaan lisätä läpinäkyvyys (transparency) alpha-parametrin avulla:
>>alpha(0.4)
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
Kolmiulotteisen tiedon visualisointi kuvana
Kolmiulotteinen tieto voidaan esittää myös kuvana, jossa x- ja y-akselit määrittävät kuva-
alkion koodinaatit. Yksittäinen kuva-alkio on nimeltään pikseli (pixel). Jokaiseen
pikseliin liittyy tieto sen sisältämästä väri- tai harmaasävyarvosta, joka vastaa edellisten
esimerkkien x-koordinaattia.
Kuvien piirtoon on ainakin 4 eri komentoa:
• image(Z) = Näyttää matriisin Z kuvana käyttäen voimassa olevaa värikarttaa
(colormap).
• imagesc(Z)= Kuten image, mutta skaalaa kuvan niin että se käyttää koko käytössä olevaa värikarttaa
• imview(Z) = Java:n virtuaalikonetta käyttävä versio (hidas mutta helppokäyttöinen)
• imshow(Z)= vain kokonaislukutyypeille toimiva versio
Visualisoidaan sinc-funktio eri tavoilla:
>>image(Z)
Eipä tuosta paljon mitään näy. Johtuu siitä, että datassa Z suurin arvo on vain 1.
Kokeillaan skaalaavaa versiota:
>>imagesc(Z)
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008
VAU ☺ ! Tämä on siis sama sinc mikä edellisissä kuvissa mesh ja surf-komennoilla
tulostettuna, mutta katsottuna ”ylhäältä päin”. Huomaa, että värikarttana on HSV kuten
aikaisemmin. Värikartan voi vaihtaa colormap-komennolla:
>>colormap(jet)
>>imagesc(Z)
>>colormap(gray)
>>imagesc(Z)
-
T211003 Sovellusohjelmat
Matlab perusteet osa 2: Matemaattisia funktioita.
Operaattorit. Vertailu- ja loogiset operaattorit
OAMK Tekniikan yksikkö Hyvinvointiteknologia
Copyright © Jukka Jauhiainen 2008