A MATLAB programozási nyelv

Alprogramok, modulok



A MATLAB-ban, hasonlóan mint a C/C++ -ban csak függvények vannak, nincsenek eljárások. Egy függvény az alábbi módon néz ki:

function [a,b,c] = fgvnev(x,y,z)

Itt:

Ha egy függvény több értéket ad vissza, akkor azokat így lehet átvenni:

[a, b] = stat([1,2,3,4,5,6,7]);

Függvény referenciák

Mint ahogy a típusok fejezetben már említettük, függvény referenciák segítségével függvényeket adhatunk át paraméterül, más függvényeknek. Ezeknek két fajtájuk van:

Az első segítségével indirekt függvényhívást hajthatunk végre. Például legyen a compute.m fájl a következő:

function r = compute(x,fun)
r=fun(x);
Illetve definiáljuk a négyzetre emelés függvényét sqr = @(x) x.^2, ekkor a compute(x,sqr) hívással éppen x négyzetét számoljuk ki.

A második eset lehetőséget biztosít kifejezések, programok egyszerűsétésére. Az anonímus függvények törzse csak egy egyszerű MATLAB utasítás vagy kifejezés lehet. Vegyük például a x = g * cos(omega * t) kifejezést, ahol t a változó, omega-t és g-t pedig lekötjük. Ha egy másik függvénynek akarjuk ezt a kifejezést átadni, akkor az előző módszernél ideiglenesen létre kellene hozni egy M-fájl-t amiben kiszámoljuk a kifejezést egy x-re, majd ezen a függvény referenciáját kell paraméterül adni. Ez azonban körülményes, az M-fájlra semmi szükségünk, illetve g és omega konstansokat is le kell rögzíteni minden hívásnál.
Ha viszont anonímus függvényt írunk a kifejezésre és így adjuk paraméterül akkor az konstansokat egyszer kell rögzíteni és külön fájlt sem kell létrehozni. Például:

g = 2.5; omega = 10;
quad(@(t) (g * cos(omega * t)), 0, 7)
Ezzel a kifejezés határozott integrálját számoljuk ki 0 és 7 között. Az anonímus függvényeket lementhetjük egy mat fájlba a save anon.mat f utasítással, ahol f a függvény referenciája. Ha újból szükségünk van rá például egy másik munkaasztalon, akkor a load anon.mat f parancsal vissza is tölthetjük.

Paraméterátadás

Nemcsak matlabban írt függvényeket használhatunk, hanem korábban elkészített C programkönyvtárakat is betölthetünk. Ehhez a loadlibrary('shrlib','hfile') parancsot kell használni. Melynek első paramétere a függvénykönyvtár .dll fájlja, a második pedig a függvényeket tartalmazó .h header fájl neve. Például az libmx könyvtár betöltéséhez:

hfile = [matlabroot '\extern\include\matrix.h'];
loadlibrary('libmx', hfile)
parancsot kell kiadnunk. Ha a könyvtár információkat is le szeretnénk kérni, akkor a libfunctions libmx -full utasítást kell használnunk. Ezek C függvények, éppen ezért híváskor is C adattípusokat várnak. Legtöbb esetben azonban közvetlen átadhatjuk a MATLAB adattípusokat is, és nem kell külön konverziót végeznünk. Néhány általános szabály: