[Edellinen] [Seuraava] [Alkusivu]

MATLAB-opas

MATLABin uudet piirteet

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.

Uudet tietorakenteet

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];

Funktio-osoitin

Uusi @-funktio-osoitin (function handle) nopeuttaa 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-ohjelmointi

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 luokka pizza 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';

Muuta

MATLABin Release Notes dokumenteissa on MATLAB-versioiden uudet piirteen kuvattu tarkemmin. Dokumentit löytyvät support-sivuilta tai Helpin What's New-valinnan takaa.
[Edellinen] [Seuraava] [Alkusivu]