Mexfiles

Mexfiles

sind die Interface-Routinen zwischen Matlab-Scripts und C-Funktionen (bzw. FORTRAN-Subroutinen, hier wird nur das Interface zu C betrachtet).

  • Mexfiles können aus Matlab-Scripts aufgerufen werden wie .m-Funktionen (“normale” C-Funktionen können grundsätzlich nicht direkt aus Matlab-Scripts aufgerufen werden).
     
  • Mexfiles sind C-Funktionen, die in jedem Fall entsprechend
        • #include    "mex.h"

          void mexFunction (int nlhs , mxArray *plhs[],
                            int nrhs , const mxArray *prhs[])

    den Namen mexFunction haben und die Header-Datei mex.h (gehört zu Matlab) einbinden müssen. Die C-Funktion, für die dieses Interface bestimmt ist, wird dann aus der mexFunction heraus aufgerufen.

Aufruf aus Matlab-Scripts

Aufgerufen wird die “mexFunktion” aus einem Matlab-Script mit ihrem Dateinamen. Das Zusammenspiel soll am Beispiel des Aufrufs der C-Funktion femalg_f, die den gesamten FEM-Algorithmus in FEMSET abarbeitet, beschrieben werden:

    Es wird eine C-Funktion mexFunction geschrieben, aus der die C-Funktion femalg_f aufgerufuen wird. Die mexFunction wird z. B. in der Datei femalg_m.c gespeichert. Diese wird mit dem “mex-Compiler” mex übersetzt, es entsteht (unter Windows) eine “DLL-Datei” femalg_m.dll, die aus einem Matlab-Script dann wie eine Matlab-Funktion aufgerufen werden kann, z. B. so:

          [succ uv] = femalg_m (xy , km , ep , kr , bk) ;

    Bei diesem Aufruf würde die mexFunction die Information über die Input-Parameter als nrhs=5 (Anzahl der “Right hand side”-Werte) und mit 5 Pointern auf xy, km, ep, kr und bk im Array prhs entgegennehmen. Mit nlhs=2 (Anzahl der “Left hand side”-Werte) wird der mexFunction signalisiert, dass sie zwei Pointer auf Ergebnisse im Feld plhs abliefern muss.

Setup des mex-Compilers

Die Datei, die die Interface-Funktion mexFunction enthält, muss mit dem Matlab-Script mex compiliert werden, dem ein C-Compiler zur Verfügung stehen muss. Die Verbindung des mex-Scripts mit dem C-Compiler muss über

mex  -setup

hergestellt werden, was aus dem Command Window von MATLAB oder im DOS-Fenster realisiert werden kann. Nachfolgend ist dafür je ein Beispiel für den sich danach ergebenden Dialog  zu sehen. In beiden Fällen wird das Angebot von mex genutzt, nach installierten Compilern zu suchen. Es wird jeweils neben dem Lcc-Compiler, der zu MATLAB gehört, ein “Microsoft Visual C”-Compiler gefunden, der ausgewählt wird.

 

 

 

Homepage MatlabFemset

www.JuergenDankert.de

D

nkert.de