Indholdsfortegnelse:

Lav en Matlab MEX -fil: 3 trin
Lav en Matlab MEX -fil: 3 trin

Video: Lav en Matlab MEX -fil: 3 trin

Video: Lav en Matlab MEX -fil: 3 trin
Video: bike stunts#shorts 😈😈😈🤬🤬🤬🏍️🏍️🏍️🔥🏍️🏍️ xtreme motorbikes game 2024, November
Anonim
Lav en Matlab MEX -fil
Lav en Matlab MEX -fil

Instruktioner om, hvordan man integrerer kompileret C -kode med Matlab. MEX står for MATLAB Executable. MEX-filer er dynamisk forbundne underrutiner produceret fra C- eller Fortran-kildekode, der, når de kompileres, kan køres indefra MATLAB på samme måde som MATLAB M-filer eller indbyggede funktioner. De eksterne grænsefladefunktioner giver funktionalitet til at overføre data mellem MEX-filer og MATLAB, og muligheden for at kalde MATLAB-funktioner fra C- eller Fortran-kode. Her viser jeg dig alt, hvad du har brug for for hurtigt at lave en nyttig mex-fil. Hvad du vil need: = en tekstredigerer = matlab 6.1 eller nyere (tidligere versioner kan også lave mex -filer, men lidt anderledes format) = matlab har sin egen c -compiler, der følger med, men jeg brugte visuel c ++ compiler, fordi jeg havde det.

Trin 1: Koden

Koden
Koden

download den fil, jeg vedhæftede: mextest1p0.cpp

cpp står for c ++ ……… Dette er hvad koden gør: ……… det tager et nummer, du sender den fra matlab -kommandoprompten. Det udskriver "hej verden" i matlab det returnerer to argumenter til matlab, et to -element nummer array og en streng det første element i det returnerede tal array er 1 + det nummer du sendte det det andet element i det returnerede tal array er 2 + nummeret du sendte det ………. Sådan implementeres det: ………… gem filen på din computer start matlab naviger i matlab til det bibliotek, hvor filen er, følg derefter kompilations- og udførelsesinstruktionerne øverst i.cpp -fil. Jeg kan ikke skrive disse instruktioner her, fordi instruktører automatisk redigerer kommandoerne og får dem til at blive vist forkert. På billedet herunder kan du se koden fungere. Du skal ikke bekymre dig om "kommandolinjeadvarsel", det ser ikke ud til at påvirke noget. Bemærk i venstre side, den aktuelle mappe indeholder.cpp -filen. Til højre kan du se mig sammensætte koden og derefter udføre den fra matlab. Læs filen igennem i din teksteditor (f.eks. Notesblok i Windows), den er meget veldokumenteret og selvforklarende, du vil kunne gøre næsten alt hvad du har brug for ved at følge konventionerne i koden (dvs. kopiere og indsætte den og lave små ændringer) ################################################# ######################### …….. BEMÆRK …….. på grund af nogle irriterende automatisk redigering, som instruktører gør, koden som vist på næste side VIRKER IKKE, DU SKAL DOWNLOADE FILEN, jeg vedhæftede i stedet for at kopiere og indsætte denne. #################################################### #######################

Trin 2: Dette er koden, IKKE KOPIERE OG PASTE

Dette er koden, IKKE KOPIERE OG PASTE
Dette er koden, IKKE KOPIERE OG PASTE

#################################################### ###################### …….. BEMÆRK ……..på grund af nogle irriterende automatisk redigering, som instruktører gør, VIL koden som vist på denne side IKKE ARBEJDE, du er nødt til at downloade den fil, jeg vedhæftede i stedet for at kopiere og indsætte dette. ################################## ######################################### Dette blev skrevet i c ++ af leevonk // det er kode til en matlab mex -fil // koden vil indtage en talværdi og udsende to talværdier // de to outputnumre beregnes ud fra inputnummeret // koden udsender også en strengværdi // koden vil udskriv også "hej verden" #include "mex.h" void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############## ############################# // #######-print "hej verden"-### ######### // ######################################### ### mexPrintf ("Hej verden"); // ####################################### ##### // #########-Få ting fra Matlab-########## // ################# ############################/ * erklærer en matrixvariabel for at holde de indgående værdier*/dobbelt* InValues;/* få værdierne sendt fra matlab*/InValues = mxGetPr (prhs [0]);/* for at bruge disse værdier, der blev sendt fra matlab, gør InValues [0], InValue [1] osv. I henhold til hvor mange værdier der er. InValues bruges nedenfor */// ########################################## ## // #########-Returner et tal array-########## // ##################### #########################/ * erklærer det array, der sendes til matlab (* gør det til et array) */double * OutValues;/ * Opret/tildel returneringsargument, en 1x2 (1 række 2 kolonne) Matrix for return arrayets første slot (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Hent markør til returargumentet */OutValues = mxGetPr (plhs [0]); / * tildel værdier til OutValues, som ligger i return arrayets første slot, her bruger vi InValues til at computer OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ############################################# // ############-Returner en streng-############# // ################## ###########################/* erklærer strengvariablen for at blive sendt til matlab*/char* str;/* tildel en værdi til string */str = "byebye";/ *læg strengen i returkarrays anden plads (plhs [1]) */plhs [1] = mxCreateString (str); // ########### ##################################//###########--Vend tilbage flere ting-############# // ################################## #############/ * for at returnere flere ting, følg de generelle regler ovenfor, men sæt tingene i andre plhs -slots, plhs [somenumber] */}

Trin 3: Hvis det af en eller anden grund ikke kompileres

Hvis det af en eller anden grund ikke kompileres
Hvis det af en eller anden grund ikke kompileres

Hvis det af en eller anden grund ikke kompileres (det burde, fungerer fint på min computer) se disse ressourcer, er det her, jeg lærte af. De har små fejl (brug noget gammel, ikke -funktionel grammatik osv.), Men hvis du går frem og tilbage mellem de to, skal du være i stand til at samle noget, der virker. Http://web.ccr.jussieu.fr/ccr/ Dokumentation/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Anbefalede: