Tämän oppaan esimerkit toimivat myös MATLABin vanhemmilla versioilla 4 ja 5. Versiosta 6 eteenpäin MATLAB sisältää joukon uusia piirteitä, jotka laajentavat MATLABin käyttömahdollisuuksia ja tekevät siitä hyvin monipuolisen ohjelmointi- ja sovelluskehitysympäristön. Alla on mainittu joitain hyödyllisiä uusia ominaisuuksia. Uusia MATLAB-tietotyyppejä ovat struktuurit ja solutaulukot. Ohjelmointitekninen muutos liittyy siihen, että nyt voidaan määritellä omia oliluokkia (class) ja niille menetelmiä (methods) sopivien MATLAB-funktioiden avulla.
Aikaisemman moniulotteisen matriisin lisäksi MATLABissa voi käyttää monista ohjelmointikielistä tunnettuja struktuureja (struct) sekä eri tyyppisiä tietoalkioita sisältäviä taulukoita (cell array).
Struktuurissa alkiot ilmoitetaan pistenotaatiolla x.alkio
» x.a = rand(4); » x.b = 'satunnaislukuja'; » x.c = 4; » x = a: [4x4 double] b: 'satunnaislukuja' c: 4
Struktuureja käytetään kokoamaan muttujien arvoja yhteen niiden käsittelemisen ja ryhmittelyn helpottamiseksi. Ne ovat käytännöllisiä erityisesti olio-ohjelmoinnin yhteydessä. Katso esimerkiksi funktion class helppiä.
Solutaulukko (cell array) määritellään aaltosulkujen avulla (tai sopivien cell-funktioden avulla). Solutaulukko on kätevä varsinkin tekstimuuttujien käsittelyssä
» ainekset = {'kana','ananas','oliivi','sipuli','tonnikala'}; » n = length(ainekset); » i = randperm(n); » pizza = ainekset(i(1:3)) pizza = 'sipuli' 'tonnikala' 'kana'
Struktuurin voi myös yhdistää cell-taulukkoon:
» oppilas{1}.nimi='Mikko Mallikas'; » oppilas{1}.tulokset=[2 5 4 3 4]; » oppilas{2}.nimi='Tiina Tomera'; » oppilas{2}.tulokset=[3 3 2 5];
feval
-funktion
toimintaa. Rakenne @funname
luo osoittimen funktioon.
Tätä suositellaan aikaisemman 'funktion_nimi'
tavan sijasta.
Kosinifunktion nollakohta lähellä lukua 1 löytyy komennon
fzero('cos',1)
lisäksi ja mieluummin komennolla
fzero(@cos,1)
.
Miukumerkin @ avulla voi myös määritellä ns. anonyymin funktion. Anonyymisyys tarkoittaa, että funktiolla ei ole varsinaisesti nimeä ja siihen viitataan funktio-osoittimen tai suoran konstruktion avulla. Tämä sopii parhaiten yhden rivin funktioille. Esimerkiksi määrittelemällä
» fun = @(x) x.*cos(30*x).*sin(x)voidaan numeerinen integraali laskea komennolla:
» I = quadl(fun,0,2*pi);Huomaa, että argumetti
fun
annetaan nyt ilman @-merkkiä tai
hipsukoita. Funktion voi määritellä myös suoraan
kutsuargumentissa:
» I = quadl(@(x) x.*cos(30*x).*sin(x),0,2*pi);Tätä tapaa voi käyttää myös omien m-funktioiden sisällä luomaan pieniä lokaaleja apufunktioita. Esimerkiksi funktio, joka palauttaa epätäydellisen betafunktion (betainc) käänteisfunktion etsimällä apufunktioksi luodun funktion
betainc(x,z,w) - y
nollakohdan
fzero-funktion avulla:
function x = ibetainc(y,z,w) % Inverse of incomplete beta function betainc zfun = @(x,z,w,y) betainc(x,z,w) - y; x = fzero(zfun,[0 1],optimset('TolX',1e-5),z,w,y);
Olio-ohjelmoinnissa luodaan uusia tietoalkioita eli luokkia (class) ja määritellään niille laskutoimituksia ja funktioita (methods). MATLAB-ohjeissa on kuvattu tarkemmin oliohjelmoinnin käsitteitä ja sitä millaisilla MATLAB-ohjelmilla uusia luokkia tehdään.
Esimerkiksi luokkapizza
ohjelmoidaan tekemällä alihakemisto
@pizza
, johon sijoitetaan luokan luonti- ja
metodifunktiot. Teknisesti luokkaolio on struktuuri, joka sisältää
olion ominaisuuksia kuvaavia muuttujia. Struktuurin alkiot on
piilotettu käyttäjältä ja luokkamuuttujia käsitellään ainoastaan
niille määriteltyjen metodifunktioiden avulla. Myös
peruslaskutoimitukset voidaan määritellä toimimaan halutulla tavalla
luokkamuuttujien yhteydessä. Pizza-luokan jäsen voisi esimerkiksi
sisältää tiedon siinä käytettävistä aineksista ja vaikka pizzan
hinnasta. Voimme myös määritellä yhteen ja vähennyslaskun niin, että
pizzoihin voidaan lisätä tai vähentää täytteitä.
» p1 = pizza('kinkku','ananas','valkosipuli'); » p2 = p1 - 'valkosipuli'; » p3 = p1 + 'oliivi';