Innehållsförteckning:

Gör en Matlab MEX -fil: 3 steg
Gör en Matlab MEX -fil: 3 steg

Video: Gör en Matlab MEX -fil: 3 steg

Video: Gör en Matlab MEX -fil: 3 steg
Video: Stages of Colon Cancer 2024, Juli
Anonim
Gör en Matlab MEX -fil
Gör en Matlab MEX -fil

Instruktioner om hur man integrerar kompilerad C -kod med Matlab. MEX står för MATLAB Executable. MEX-filer är dynamiskt länkade underrutiner som produceras från C- eller Fortran-källkod som, när de kompileras, kan köras inifrån MATLAB på samma sätt som MATLAB M-filer eller inbyggda funktioner. De externa gränssnittsfunktionerna ger funktioner för överföring av data mellan MEX-filer och MATLAB, och möjligheten att ringa MATLAB-funktioner från C- eller Fortran-kod. Här visar jag dig allt du behöver för att snabbt göra en användbar mex-fil. Vad du ska need: = en textredigerare = matlab 6.1 eller senare (tidigare versioner kan också göra mex -filer men något annorlunda format) = matlab har sin egen c -kompilator som följer med, men jag använde visuell c ++ - kompilator eftersom jag hade det.

Steg 1: Koden

Koden
Koden

ladda ner filen jag bifogade: mextest1p0.cpp

cpp står för c ++ ……… Så här gör koden: ……… det tar ett nummer som du skickar den från matlab -kommandotolken. Det skriver ut "hej världen" i matlab, det returnerar två argument till matlab, en tvåelementsnummermatris och en sträng det första elementet i den returnerade talmatrisen är 1 + talet du skickade det det andra elementet i den returnerade talmatrisen är 2 + numret du skickade det ………. Så här implementerar du det: ………… spara filen på din dator starta matlab navigera i matlab till katalogen där filen är och följ sedan sammanställnings- och körinstruktionerna högst upp i.cpp -fil. Jag kan inte skriva dessa instruktioner här eftersom instruktörer redigerar kommandona automatiskt och får dem att visas felaktigt. På bilden nedan kan du se koden fungera. Oroa dig inte för "kommandoradsvarningen", det verkar inte påverka någonting. Lägg märke till vänster, den aktuella katalogen innehåller.cpp -filen. Till höger kan du se mig sammanställa koden och sedan köra den från matlab. Läs igenom filen i din textredigerare (till exempel anteckningsblock i Windows), den är mycket väl dokumenterad och självförklarande, du kommer att kunna göra nästan allt du behöver genom att följa konventionerna i koden (dvs. kopiera och klistra in den och göra små ändringar) ################################################## ######################### …….. OBSERVERA …….. på grund av några irriterande auto-redigering som instruktörer gör, koden som visas på nästa sida kommer inte att fungera, du måste ladda ner filen jag bifogade istället för att kopiera och klistra in detta. #################################################### ########################

Steg 2: Detta är koden, KOPIERA INTE OCH KLISTA IN

Detta är koden, KOPIERA INTE OCH SKICKA IN
Detta är koden, KOPIERA INTE OCH SKICKA IN

#################################################### ###################### …….. OBSERVERA ….. på grund av några irriterande automatisk redigering som instruktörer gör, kommer INTE koden som ses på den här sidan ARBETE, du måste ladda ner filen jag bifogade istället för att kopiera och klistra in detta. ################################# ######################################## // Detta skrevs i c ++ av leevonk // det är kod för en matlab mex -fil // koden tar in ett siffervärde och matar ut två siffervärden // de två utmatningsnumren beräknas från inmatningsnumret // koden kommer också att mata ut ett strängvärde // koden kommer skriv också ut "hej världen" #inkludera "mex.h" void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############## ############################## // #######-skriv ut "hej världen"-### ######### // ######################################### ### mexPrintf ("Hej världen"); // ####################################### ##### // #########-Få saker från Matlab-########## // ################# ############################/ * deklarera en matrisvariabel för att hålla de inkommande värdena*/dubbel* InValues;/* få värdena skickade från matlab*/InValues = mxGetPr (prhs [0]);/* för att använda dessa värden som skickades från matlab, gör InValues [0], InValue [1], etc enligt hur många värden det finns. InValues kommer att användas nedan */// ########################################## ## // #########-Returnera en talmatris-################################ #########################/ * deklarera matrisen som kommer att skickas till matlab (* gör det till en array) */double * OutValues;/ * Skapa/fördela returargument, en 1x2 (1 rad 2 -kolumn) Matris för returmatrisens första plats (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Hämta pekare till returargumentet */OutValues = mxGetPr (plhs [0]); / * tilldela OutValues värden som kommer att finnas i returmatrisens första plats, här använder vi InValues för att datorera OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ############################################# // ############-Returnera en sträng-############# // ################## ###########################/* deklarera att strängvariabeln ska skickas till matlab*/char* str;/* tilldela ett värde till string */str = "byebye";/ *sätt strängen i retursystemets andra plats (plhs [1]) */plhs [1] = mxCreateString (str); // ########### ##################################//###########--lämna tillbaka mer grejer--############//################################ #############/ * för att returnera fler saker, följ de allmänna reglerna ovan men lägg sakerna i andra plhs -platser, plhs [somenumber] */}

Steg 3: Om det av någon anledning inte kompileras

Om det av någon anledning inte kompileras
Om det av någon anledning inte kompileras

Om det av någon anledning inte kompileras (det borde, fungerar bra på min dator) se dessa resurser, de är där jag lärde mig från. De har små fel (använd lite gammal, icke -funktionell grammatik, etc.) men om du går fram och tillbaka mellan de två borde du kunna koka ihop något som fungerar. Http://web.ccr.jussieu.fr/ccr/ Documentation/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Rekommenderad: