Inhoudsopgave:

Een Matlab MEX-bestand maken: 3 stappen
Een Matlab MEX-bestand maken: 3 stappen

Video: Een Matlab MEX-bestand maken: 3 stappen

Video: Een Matlab MEX-bestand maken: 3 stappen
Video: MATLAB meshgrid, surf, and mesh 3D plotting 2024, November
Anonim
Een Matlab MEX-bestand maken
Een Matlab MEX-bestand maken

Instructies voor het integreren van gecompileerde C-code met Matlab. MEX staat voor MATLAB Executable. MEX-bestanden zijn dynamisch gekoppelde subroutines die zijn geproduceerd uit C- of Fortran-broncode en die, wanneer ze zijn gecompileerd, kunnen worden uitgevoerd vanuit MATLAB op dezelfde manier als MATLAB M-bestanden of ingebouwde functies. De externe interfacefuncties bieden functionaliteit om gegevens over te dragen tussen MEX-bestanden en MATLAB, en de mogelijkheid om MATLAB-functies aan te roepen vanuit C- of Fortran-code. Hier laat ik je alles zien wat je nodig hebt om snel een bruikbaar mex-bestand te maken. nodig: = een teksteditor = matlab 6.1 of hoger (eerdere versies kunnen ook mex-bestanden doen, maar een iets ander formaat) = matlab heeft zijn eigen c-compiler die daarbij hoort, maar ik gebruikte een visuele c++-compiler omdat ik die had.

Stap 1: De code

De code
De code

download het bestand dat ik heb bijgevoegd: mextest1p0.cpp

cpp staat voor c++ ………Dit is wat de code doet: ……… er is een getal voor nodig dat u het vanaf de matlab-opdrachtprompt verzendt. Het drukt "hallo wereld" af in matlab, het retourneert twee argumenten naar matlab, een array met twee elementen en een string, het eerste element van de array met geretourneerde getallen is 1 + het nummer dat je hebt verzonden, het tweede element van de array met geretourneerde getallen is 2 + het nummer dat je het hebt gestuurd ………. Dit is hoe het te implementeren:………… sla het bestand op je computer op start matlab navigeer in matlab naar de map waar het bestand zich bevindt en volg de compilatie- en uitvoeringsinstructies bovenaan de pagina.cpp-bestand. Ik kan deze instructies hier niet schrijven omdat instructables de opdrachten automatisch bewerkt en ze onjuist laat verschijnen. In de onderstaande afbeelding ziet u de code werkend. Maak je geen zorgen over de "opdrachtregelwaarschuwing", het lijkt niets te betekenen. Merk aan de linkerkant op dat de huidige map het.cpp-bestand bevat. Aan de rechterkant zie je me de code compileren en vervolgens uitvoeren vanuit matlab. Lees het bestand door in uw teksteditor (bijvoorbeeld kladblok in Windows), het is zeer goed gedocumenteerd en spreekt voor zich, u kunt bijna alles doen wat u nodig heeft door de conventies in de code te volgen (dwz kopiëren en plakken en maken kleine wijzigingen) ############################################### ######################## …….. OPMERKING…….. vanwege enkele vervelende automatische bewerkingen die instructables doet, is de code zoals te zien op de volgende pagina WERKT NIET, je MOET HET BESTAND DOWNLOADEN dat ik heb bijgevoegd in plaats van dit te kopiëren en te plakken. ################################################## ######################

Stap 2: Dit is de code, NIET KOPIREN EN Plakken

Dit is de code, NIET KOPIREN EN Plakken
Dit is de code, NIET KOPIREN EN Plakken

################################################## #####################…….. OPMERKING……..vanwege een aantal vervelende automatische bewerkingen die instructables doet, zal de code zoals te zien op deze pagina NIET WERK, je MOET HET BESTAND DOWNLOADEN dat ik heb bijgevoegd in plaats van dit te kopiëren en te plakken.################################# #######################################//Dit is geschreven in c++ door leevonk// het is een code voor een matlab mex-bestand//de code neemt één getalwaarde in en geeft twee getalwaarden uit//de twee uitgangsnummers worden berekend op basis van het ingevoerde getal//de code geeft ook een tekenreekswaarde af//de code zal print ook "hello world"#include "mex.h"void mexFunction(int nlhs, mxArray *plhs, int nrhs, mxArray *prhs) {//############# #############################//#######--print "hallo wereld"--### #########//####################################### ###mexPrintf("Hallo wereld");//##################################### #####//########--Haal dingen van Matlab--#########//################ ##########################/ * declareer een arrayvariabele om de binnenkomende waarden vast te houden */double* InValues;/* haal de waarden op die zijn verzonden vanuit matlab */InValues = mxGetPr(prhs[0]);/* om deze waarden te gebruiken die zijn verzonden vanuit matlab, doe InValues [0], InValue[1], enz. afhankelijk van hoeveel waarden er zijn. De InValues worden hieronder gebruikt *///######################################## ##//########--Retourneer een nummerreeks--#########//################### #######################/* declareer de array die naar matlab wordt gestuurd (de * maakt er een array van) */double* OutValues;/ * Aanmaken/toewijzen retourargument, een 1x2 (1 rij 2 kolom) Matrix voor het eerste slot van de retourarray (plhs[0]) */plhs[0]=mxCreateDoubleMatrix(1, 2, mxREAL); /* Verwijs naar het retourargument */OutValues = mxGetPr(plhs[0]); /* wijs waarden toe aan OutValues die zich in het eerste slot van de return-array bevinden, hier gebruiken we de InValues om de OutValues te berekenen */OutValues[0] = InValues[0] + 1;OutValues[1] = InValues[0] + 2;//###########################################// ###########--Retourneer een string--#############//################# ##########################/* declareer de stringvariabele die naar matlab wordt gestuurd */char* str;/* wijs een waarde toe aan de string */str = "byebye";/* plaats de string in het tweede slot van de return-arrays (plhs[1]) */plhs[1]=mxCreateString(str);//########## ##################################//###########--opbrengst meer spullen--############//################################ ############/* om meer spullen te retourneren, volg de algemene regels hierboven maar plaats de spullen in andere plhs-slots, plhs[somenumber] */ }

Stap 3: Als het om welke reden dan ook niet wordt gecompileerd

Als het om welke reden dan ook niet compileert
Als het om welke reden dan ook niet compileert

Als het om wat voor reden dan ook niet compileert (het zou moeten, werkt prima op mijn computer) deze bronnen te zien, dan is dat waar ik van heb geleerd. Ze hebben kleine glitches (het gebruik van wat oude, niet-functionele grammatica, enz.) Documentatie/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Aanbevolen: