Kun MATLABille kirjoittaa jonkun nimen, esimerkiksi foo
,
MATLAB-tulkki toimii seuraavassa järjestyksessä:
foo
muuttuja
foo
sisäänrakennettu funktio
foo.mex
tai
foo.m
-nimistä tiedostoa.
path
.
MEX-tiedostot liittyvät käyttäjän tekemiin C- tai fortran-kielisiin aliohjelmiin. Käsittelemme niitä myöhemmin. M-tiedostot ovat tavallisia tekstitiedostoja, joita voivat sisältää MATLAB-komentoja tai vaihtoehtoisesti funktion määrittelyn. MATLAB-komentoja sisältävää M-tiedostoa kutsutaan komentotiedostoksi eli skriptiksi. Tiedoston sisältämät MATLAB-komennot suoritetaan annettaessa tiedoston nimi MATLABille. Esimerkiksi MATLABin mukana tulevat demot ovat tällaisia skriptejä.
Jos M-tiedoston ensimmäinen rivi alkaa sanalla
function
on kyseessä funktion määrittely. Funktio eroaa
skriptistä siinä, että funktiolle voi antaa parametreja ja
funktionmäärittelyn sisällä olevat muuttujanmäärittelyt ja suoritetut
laskutoimitukset ovat lokaaleja ts. ne eivät näy
varsinaisessa MATLAB-työtilassa. Suuri osa MATLABin mukana tulevista
funktiosta on toteutettu M-tiedostoina ja niiden sisältö on siten
vapaasti tutkittavissa (esimerkiksi MATLAB-komennon
type
avulla).
Esimerkki M-funktiosta:
function y = mean(x) %MEAN Average or mean value. For vectors, MEAN(X) is the mean % value of the elements in vector X. For matrices, MEAN(x) % is a row vector containing the mean value of each column. [m,n] = size(x); if m == 1 m = n; end y = sum(x) / m;
Funktion otsikkorivin jälkeen tulevat kommenttirivit, joiden teksti
tulostuu help
-komennon yhteydessä.
Funktiomäärittelyn sisällä on käytettävissä hyödylliset muuttujat
nargin
ja nargout
, input-argumenttien ja
output-argumenttien lukumäärän tarkastamiseksi.
function r = rank(x,tol) %RANK Rank. K = RANK(X) is the number of singular values of X % that are larger than MAX(SIZE(X)) * NORM(X) * EPS. % K = RANK(X,tol) is the number of singular values of X that % are larger than tol . s = svd(x); if (nargin == 1) tol = max(size(x)) * s(1) * eps; end r = sum(s > tol);
MATLAB sisältää muista ohjelmointikielistä tutut
kontrollirakenteet,
kuten
for
ja
while
loopit sekä
if .. else
lauseen.
Kontrollirakenteita käyttäessä on syytä muistaa vektoriajattelu. Monet asiat voidaan hoitaa suoraan vektorioperaatioilla ilman kontrollirakenteita.
Ei näin:
i=0; for t=0:.01:10 i=i+1; y(i) = sin(t); endVaan näin:
t = 0:.01:10; y = sin(t);tai suoraan
y = sin(0:.01:10);
Otetaan oikein yksinkertainen esimerkki. Ajatellaan, että haluttaisiin tehdä funktio f(x)=e-x2 Haluamme, että jos funktiolle annetaan syötteenä skalaari, vektori tai matriisi, niin se palauttaa samanmuotoisen tuloksen funktion e-x2 arvoja. (Näin toimivat yleensä kaikki MATLAB:n matemaattiset funktiot.)
function y=g(x) % Funktio laskee sitä sun tätä (help tulostaa alussa olevat kommenttirivit) y=exp(-x.^2); % Piste tarvitaan, koska halutaan tuo mainittu vektoriominaisuus % Puolipiste on hyödyllinen, jotta funktion sisältä ei syöksähtäisi % ylimääräisiä tulostuksia
Nyt voit laskea arvoja, piirtää kuvaajan, ym. aivan kuten vaikkapa
sin
-funktiolle. Kokeile!
MATLAB löytää funktiotiedostot työskentelyhakemistosta sekä muuttujan
matlabpath
osoittamista hakemistoista. Joskus voi tulla
nimikonflikteja.
Oman funktion tekeminen on välttämätöntä mm. yllä mainituissa
tehtävissä. Otetaan esimerkiksi numeerinen integrointi, johon
MATLAB:ssa on funktiot
quad
ja
quadl
.
Kokeile esimerkiksi
>> quad('g',0,5); % Oletustoleranssi >> format long >> quad('g',0,5,0.000000001); % Käyttäjän vaatima toleranssi
MATLAB:n quad
-funktioissa on joitakin ongelmia, kuten se
omituisuus, että funktiotiedoston nimi ei saa olla f.m
(tämä
on korjattu uusimmissa MATLAB-versioissa). Aika helposti ainakin
quad
:n tapauksessa tulee syyttä suotta varoituksia:
Recursion level limit reached in quad. Singularity likely.
Muita (MATLABin version 4) "funktiofunktioita":
>> help funfun Function functions - nonlinear numerical methods. ode23 - Solve differential equations, low order method. ode23p - Solve and plot solutions. ode45 - Solve differential equations, high order method. quad - Numerically evaluate integral, low order method. quad8 - Numerically evaluate integral, high order method. fmin - Minimize function of one variable. fmins - Minimize function of several variables. fzero - Find zero of function of one variable. fplot - Plot function. See also The Optimization Toolbox, which has a comprehensive set of function functions for optimizing and minimizing functions.
Tutki helpin avulla ja testaa.
MATLABista käsin voidaan kutsua käyttäjän kirjoittamia C- tai fortran aliohjelmia. Nämä näkyvät MATLAB-istunnossa tavallisina MATLAB-funktioina. Näin voidaan lisätä huomattavasti käytettävissä olevien funktioiden määrää. Ulkoisia ohjelmia käytetään mex-tiedostojen avulla.
Yksinkertaisin tapa käyttää ulkoista ohjelmaa perustuu parametrien
ja datan välitykseen tiedostojen avulla. Olkoon meillä ohjelma
myprog
, joka luettuaan datan määrätyn nimisestä tiedostosta,
käsittelee sitä ja lopuksi kirjoittaa tulokset toiseen
tiedostoon. Välittävä MATLAB-funktio voisi olla vaikka seuraavanlainen
function y=myprog(x) save indata.dat x -ascii !run myprog load outdata.dat y=outdata;MATLAB-funktioilla
save
ja
load
talletetaan ja luetaan ASCII-muodossa olevaa dataa. Kysymysmerkki
!
komentorivin alussa luo käyttöjärjestelmän aliprosessin,
jossa annettu ohjelma suoritetaan. Katso myös esimerkkinä vaikka
print.m
-funktion toteutusta.
Kehittyneempi tapa omien ohjelmien käyttöön on tehdä mex-tiedostoja, so. ohjelmia joihin on suoraan linkitetty oma aliohjelma ja jotka dynaamisesti ladataan muistiin ja joissa parametrit välitetään MATLABin sisäisesti.