MATLAB-ohjelmointia, MEX-tiedostot

MEX-tiedostot

Alla esimerkit liittyvät Matlab versio 4:n mex-koodiin. Uusimmissa versioissa ovat API-kutsut hieman muuttuneet.

MEX-tiedostojen avulla voi MATLABista käsin käyttää ulkoisia c- tai fortran-kielisiä ohjelmia aivan kuin ne olisivat tavallisia MATLAB-funktioita. Jotta tämä olisi mahdollista täytyy ohjelma olla kirjoitettu tietyn kaavan mukaisesti. Vaihtoehtoisesti on kirjoitettava uusi 'päällysfunktio', jonka kutsu on tämän MEX-mallin mukainen.

Seuraava c-kielinen ohjelma kutsuu NAG-aliohjelmakirjaston funktiota S15AEF ('error'-funktio) ja on kirjoitettu niin, että sen voi kääntää MEX-tiedostoksi (Tämä on Matlabin version 4 mukaista MEX-koodia).

/* Simple CMEX routine to call NAG special function */
#include "cmex.h"
 
extern double s15aef_(double *x, int *ifail);
 
void mexFunction(int nout, Matrix *pout[], int nin, Matrix *pin[])
{
  int i,m,n, ifail;
  double x;
 
/* Check the number of input and output arguments */
  if (nin != 1)
    mexErrMsgTxt("Needs 1 input parameter");
  else if (nout > 1)
    mexErrMsgTxt("Only 1 output argument");
 
  m = mxGetM(pin[0]);               /* Get the size of input matrix */
  n = mxGetN(pin[0]);
 
  pout[0] = mxCreateFull(m,n,REAL); /* Create output matrix */
 
  ifail = 1;
  for (i=0;i<m*n;i++) {             /* Call the NAG routine in loop */
    x = (mxGetPr(pin[0]))[i];
    (mxGetPr(pout[0]))[i] = s15aef_(&x,&ifail);
  }
 
}

C-MEX-koodin on siis sisällettävä funktio mexFunction, jonka kutsu on esimerkin mukainen. Lisäksi käytettävissä on joukko apufunktioita MEX-funktion parametrien ja MATLAB-istunnon muuttujien käsittelemiseksi (esimerkissä funktiot mexErrMsgTxt, mxGetM, mxGetN, mxCreateFull ja mxGetPr).

Koodi käännetään MATLABin mukana tulevalla komennolla fmex. NAG-kirjasto saadaan mukaan linkkaukseen optiolla -lnag:

klaava% fmex simple.c -lnag

Nyt oletushakemistossa on tiedosto simple.mex, jonka MATLAB tunnistaa, ja simple-funktiota kutsuttaessa suorittaa siihen koodatun ohjelman.

Lisää infoa MEX-tiedostojen tekemisestä: MathWorks Technical Notes 1605 ja External Interfaces/API-dokumentti.


[Edellinen] [Seuraava] [Alkusivu]