Inhaltsverzeichnis:

Erstellen einer Matlab MEX-Datei - Gunook
Erstellen einer Matlab MEX-Datei - Gunook

Video: Erstellen einer Matlab MEX-Datei - Gunook

Video: Erstellen einer Matlab MEX-Datei - Gunook
Video: How to Create m File in Matlab 2024, November
Anonim
Erstellen einer Matlab MEX-Datei
Erstellen einer Matlab MEX-Datei

Anleitung zur Integration von kompiliertem C-Code in Matlab. MEX steht für MATLAB Executable. MEX-Dateien sind dynamisch verknüpfte Unterroutinen, die aus C- oder Fortran-Quellcode erzeugt werden und nach der Kompilierung in MATLAB auf die gleiche Weise 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 und 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 Need:= ein Texteditor= Matlab 6.1 oder höher (frühere Versionen können auch Mex-Dateien erstellen, aber ein etwas anderes Format) = Matlab hat einen eigenen C-Compiler, der mitgeliefert wird, aber ich habe einen Visual C++-Compiler verwendet, weil ich ihn hatte.

Schritt 1: Der Code

Der Code
Der Code

Laden Sie die Datei herunter, die ich angehängt habe: mextest1p0.cpp

cpp steht für c++ ………Das ist, was der Code macht: ……… es braucht eine Zahl, die Sie von der Matlab-Eingabeaufforderung senden. Es gibt "Hallo Welt" in Matlab aus. Es gibt zwei Argumente an Matlab zurück, ein zweielementiges Zahlenarray und eine Zeichenfolge Das erste Element des zurückgegebenen Zahlenarrays ist 1 + die Zahl, die Sie ihm gesendet haben Das zweite Element des zurückgegebenen Zahlenarrays ist 2 + die Nummer, die Sie gesendet haben ………. So implementieren Sie es: ………… speichern Sie die Datei auf Ihrem Computer Starten Sie Matlab in Matlab navigieren Sie in das Verzeichnis, in dem sich die Datei befindet, folgen Sie dann den Anweisungen zum Kompilieren und Ausführen oben auf der.cpp-Datei. Ich kann diese Anweisungen hier nicht schreiben, weil instructables die Befehle automatisch bearbeitet und sie falsch erscheinen lässt. Im Bild unten sehen Sie, wie der Code funktioniert. Machen Sie sich keine Sorgen über die "Befehlszeilenwarnung", sie scheint nichts zu bewirken. Beachten Sie auf der linken Seite, dass das aktuelle Verzeichnis die.cpp-Datei enthält. Auf der rechten Seite sehen Sie, wie ich den Code kompiliere und dann von Matlab aus ausführe. Lesen Sie die Datei in Ihrem Texteditor (z leichte Modifikationen) ############################################# ######################## …….. HINWEIS…….. wegen einiger lästiger automatischer Bearbeitung, die instructables tut, der Code, wie auf der zu sehen ist nächste Seite FUNKTIONIERT NICHT, SIE MÜSSEN DIE DATEI HERUNTERLADEN, die ich angehängt habe, anstatt sie zu kopieren und einzufügen. ################################################ ######################

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

Dies ist der Code, NICHT KOPIEREN UND EINFÜGEN
Dies ist der Code, NICHT KOPIEREN UND EINFÜGEN

################################################ #####################…….. HINWEIS……..wegen einiger lästiger automatischer Bearbeitung, die instructables tut, wird der Code, wie er auf dieser Seite zu sehen ist, NICHT ARBEITEN, Sie MÜSSEN DIE DATEI HERUNTERLADEN, die ich angehängt habe, 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 Ausgabezahlen werden aus der eingegebenen Zahl berechnet // der Code gibt auch einen String-Wert aus // der Code wird auch "hello world" ausgeben #include "mex.h"void mexFunction(int nlhs, mxArray *plhs, int nrhs, mxArray *prhs) {//############ ############################# // #######--drucken Sie "Hallo Welt"--### #########//###################################### ###mexPrintf("Hallo Welt"); //###################################### #####//########--Material von Matlab holen--##########//################ ##########################/ * eine Array-Variable deklarieren, die die eingehenden Werte enthält */double* InValues;/* die von Matlab gesendeten Werte abrufen */InValues = mxGetPr(prhs[0]);/* Um diese Werte zu verwenden, die von Matlab gesendet wurden, tun Sie InValues [0], InValue[1] usw. je nachdem, wie viele Werte vorhanden sind. 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/zuordnen, eine 1x2 (1 Zeile 2 Spalte) Matrix für den ersten Slot des Rückgabearrays (plhs[0]) */plhs[0]=mxCreateDoubleMatrix(1, 2, mxREAL); /* Hole Zeiger auf das Rückgabeargument */OutValues = mxGetPr(plhs[0]); /* OutValues Werte zuweisen, 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;//############################################// ###########--Eine Zeichenfolge zurückgeben--############## // ################# ##########################/* deklariere die String-Variable, die an Matlab gesendet werden soll */char* str;/* weise dem einen Wert zu string */str = "byebye";/* setze den String in den zweiten Slot des Rückgabe-Arrays (plhs[1]) */plhs[1]=mxCreateString(str);//########## ##################################//###########--Rückkehr mehr Zeug--############//################################ ############/* Um mehr Sachen zurückzugeben, befolge die allgemeinen Regeln oben, aber stecke die Sachen in andere plhs-Slots, plhs[somenumber] */ }

Schritt 3: Wenn es aus irgendeinem Grund nicht kompiliert wird

Wenn es aus irgendeinem Grund nicht kompiliert wird
Wenn es aus irgendeinem Grund nicht kompiliert wird

Wenn es aus irgendeinem Grund nicht kompiliert wird (sollte es auf meinem Computer gut funktionieren), diese Ressourcen sehen, habe ich von ihnen gelernt. Sie haben kleine Fehler (die Verwendung einer alten, nicht funktionierenden Grammatik usw.), aber wenn Sie zwischen den beiden hin und her wechseln, sollten Sie in der Lage sein, etwas zusammenzubasteln, das funktioniert.https://web.ccr.jussieu.fr/ccr/ Documentation/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Empfohlen: