Matlab MEX-Datei erstellen

Erstellen einer Matlab MEX-Datei: 3 Schritte

Anweisungen zum Integrieren von kompiliertem C-Code in Matlab. MEX steht für MATLAB Executable. MEX-Dateien sind dynamisch verknüpfte Unterprogramme, die aus C- oder Fortran-Quellcode erstellt wurden und beim Kompilieren in MATLAB wie MATLAB-M-Dateien oder integrierte Funktionen ausgeführt werden können. Die externen Schnittstellenfunktionen bieten Funktionen zum Übertragen von Daten zwischen MEX-Dateien und MATLAB sowie die Möglichkeit, MATLAB-Funktionen aus C- oder Fortran-Code aufzurufen.

Hier zeige ich Ihnen alles, was Sie brauchen, um schnell eine nützliche mex-Datei zu erstellen.
was du brauchen wirst:

= ein Texteditor

= matlab 6.1 oder höher (frühere Versionen können auch mex-Dateien erstellen, jedoch mit etwas anderem Format)

= matlab hat einen eigenen C-Compiler, der mitgeliefert wird, aber ich habe den Visual C ++ - Compiler verwendet, weil ich ihn hatte.

Zubehör:

Schritt 1: Der Code

Laden Sie die angehängte Datei herunter: mextest1p0.cpp
cpp steht für c ++

......... Das macht der Code: .........
Es wird eine Nummer benötigt, die Sie über die Matlab-Eingabeaufforderung senden.
Es druckt "Hallo Welt" in Matlab
Es gibt zwei Argumente an matlab zurück, ein Array mit zwei Elementnummern und eine Zeichenfolge
Das erste Element des zurückgegebenen Zahlenfelds ist 1 + die Zahl, die Sie gesendet haben
Das zweite Element des zurückgegebenen Zahlenfelds ist 2 + die Zahl, die Sie gesendet haben

.......... So setzen Sie es um: ............
Speichern Sie die Datei auf Ihrem Computer
starte matlab
Navigieren Sie in Matlab zu dem Verzeichnis, in dem sich die Datei befindet
Befolgen Sie dann die Anweisungen zum Kompilieren und Ausführen oben in der CPP-Datei. Ich kann diese Anweisungen hier nicht schreiben, da instructables die Befehle automatisch bearbeitet und sie falsch erscheinen lässt.

Im Bild unten sehen Sie, wie der Code funktioniert. Sorgen Sie sich nicht um die "Kommandozeilenwarnung", sie scheint nichts zu bewirken. Beachten Sie auf der linken Seite, dass das aktuelle Verzeichnis die CPP-Datei enthält. Auf der rechten Seite kann man sehen, wie ich den Code kompiliere und ihn dann von matlab aus ausführe.


Lesen Sie die Datei in Ihrem Texteditor durch (z. B. Notepad in Windows), sie ist sehr gut dokumentiert und selbsterklärend. Sie können fast alles tun, was Sie brauchen, indem Sie die Konventionen im Code befolgen (dh kopieren und einfügen und erstellen) leichte Modifikationen)
#######################################################################
........HINWEIS........
Aufgrund der lästigen automatischen Bearbeitung durch instructables funktioniert der Code auf der nächsten Seite NICHT. Sie MÜSSEN DIE angehängte DATEI HERUNTERLADEN, anstatt sie zu kopieren und einzufügen.
########################################################################


Schritt 2: Dies ist der Code. NICHT KOPIEREN UND EINFÜGEN

#######################################################################
........HINWEIS........
Aufgrund der lästigen automatischen Bearbeitung durch instructables funktioniert der Code auf dieser Seite NICHT. Sie MÜSSEN DIE angehängte DATEI HERUNTERLADEN, anstatt sie zu kopieren und einzufügen.
########################################################################

// Dies wurde in c ++ von leevonk geschrieben
// Es ist Code für eine Matlab-Mex-Datei
// Der Code nimmt einen Zahlenwert auf und gibt zwei Zahlenwerte aus
// Die beiden Ausgangsnummern werden aus der Eingangsnummer berechnet
// Der Code gibt auch einen String-Wert aus
// Der Code gibt auch "Hallo Welt" aus

#include "mex.h"

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

//##########################################
// ####### - "Hallo Welt" drucken - #############
//##########################################
mexPrintf ("Hallo Welt");

//##########################################
// ######## - Holen Sie sich Material von Matlab - #########
//##########################################
/ * Deklariere eine Array-Variable, die die eingehenden Werte enthält * /
double * InValues;

/ * Erhalte die von matlab gesendeten Werte * /
InValues ​​= mxGetPr (prhs [0]);

/ * Um diese von matlab gesendeten Werte zu verwenden, führen Sie InValues ​​[0], InValue [1] usw
nach wievielen Werten gibt es. Die InValues ​​werden unten verwendet * /

//##########################################
// ######## - Ein Zahlenfeld zurückgeben - #########
//##########################################
/ * Deklariere das Array, das an matlab gesendet wird (das * macht es zu einem Array) * /
double * OutValues;

/ * Rückgabeargument erstellen / zuweisen, eine 1x2-Matrix (1 Zeile 2 Spalte)
für den ersten Slot des Return-Arrays (plhs [0]) * /
plhs [0] = mxCreateDoubleMatrix (1,2, mxREAL);

/ * Zeiger auf das Rückgabeargument holen * /
OutValues ​​= mxGetPr (plhs [0]);

/ * weist OutValues ​​Werte zu, die sich im ersten Slot des Rückgabearrays befinden,
Hier verwenden wir die InValues, um die OutValues ​​zu berechnen. * /
OutValues ​​[0] = InValues ​​[0] + 1;
OutValues ​​[1] = InValues ​​[0] + 2;

//###########################################
// ########### - String zurückgeben - #############
//###########################################
/ * deklariert die String-Variable, die an matlab gesendet werden soll * /
char * str;

/ * Weisen Sie der Zeichenfolge einen Wert zu * /
str = "byebye";

/ * füge den String in den zweiten Slot des Return Arrays ein (plhs [1]) * /
plhs [1] = mxCreateString (str);

//############################################
// ########### - weitere Inhalte zurückgeben - ############
//############################################
/ * Um mehr Dinge zurückzugeben, befolge die obigen allgemeinen Regeln, aber setze sie
das Zeug in andere PLHS-Slots, PLHS [SOMENUM] * /

}

Schritt 3: Wenn aus irgendeinem Grund nicht kompiliert wird

Wenn es aus irgendeinem Grund nicht kompiliert wird (es sollte auf meinem Computer einwandfrei funktionieren), sehen Sie diese Ressourcen, von denen ich gelernt habe. Sie haben kleine Pannen (verwenden Sie eine alte, nicht funktionierende Grammatik usw.), aber wenn Sie zwischen den beiden hin und her gehen, sollten Sie in der Lage sein, etwas zusammenzubasteln, das funktioniert.

http://web.ccr.jussieu.fr/ccr/Documentation/Calcul/matlab5v11/docs/00009/009a1.htm

http://cnx.org/content/m12348/latest/