Innholdsfortegnelse:

Lag en Matlab MEX -fil: 3 trinn
Lag en Matlab MEX -fil: 3 trinn

Video: Lag en Matlab MEX -fil: 3 trinn

Video: Lag en Matlab MEX -fil: 3 trinn
Video: Facebook Hacked Account Kaise Recover Kare? Whitout Number & Email OTP 2023 | Technical Abbas 2024, Juli
Anonim
Lag en Matlab MEX -fil
Lag en Matlab MEX -fil

Instruksjoner om hvordan du integrerer kompilert C -kode med Matlab. MEX står for MATLAB Executable. MEX-filer er dynamisk koblede subrutiner produsert fra C- eller Fortran-kildekoden, som når de kompileres, kan kjøres fra MATLAB på samme måte som MATLAB M-filer eller innebygde funksjoner. De eksterne grensesnittfunksjonene gir funksjonalitet for å overføre data mellom MEX-filer og MATLAB, og muligheten til å ringe MATLAB-funksjoner fra C- eller Fortran-kode. Her viser jeg deg alt du trenger for å raskt lage en nyttig mex-fil. Hva du vil need: = en tekstredigerer = matlab 6.1 eller nyere (tidligere versjoner kan også gjøre mex -filer, men litt annerledes format) = matlab har sin egen c -kompilator som følger med, men jeg brukte visuell c ++ - kompilator fordi jeg hadde det.

Trinn 1: Koden

Koden
Koden

last ned filen jeg la ved: mextest1p0.cpp

cpp står for c ++ ……… Dette er hva koden gjør: ……… det tar et tall du sender den fra matlab -ledeteksten. Den skriver ut "hei verden" i matlab, den returnerer to argumenter til matlab, en tall med to elementer og en streng det første elementet i den returnerte tallmatrisen er 1 + tallet du sendte den, det andre elementet i den returnerte tallmatrisen er 2 + nummeret du sendte det ………. Slik implementerer du det: ………… lagre filen på datamaskinen din start matlab naviger i matlab til katalogen der filen er, følg deretter instruksjonene for kompilering og kjøring øverst i.cpp -fil. Jeg kan ikke skrive disse instruksjonene her fordi instruktører redigerer kommandoene automatisk og får dem til å vises feil. På bildet nedenfor kan du se koden fungere. Ikke bekymre deg for "kommandolinjevarselen", det ser ikke ut til å påvirke noe. Legg merke til på venstre side, den nåværende katalogen inneholder.cpp -filen. Til høyre kan du se meg kompilere koden og deretter kjøre den fra matlab. Les gjennom filen i tekstredigeringsprogrammet (for eksempel notisblokk i Windows), den er veldig godt dokumentert og forklarer seg selv. Du vil kunne gjøre nesten alt du trenger ved å følge konvensjonene i koden (dvs. kopiere og lime den inn og lage små modifikasjoner) ################################################# ######################### …….. MERKNING …….. på grunn av noen irriterende automatisk redigering som instruktører gjør, er koden sett på neste side VIRKER IKKE, DU MÅ Laste ned filen jeg har lagt ved i stedet for å kopiere og lime inn denne. #################################################### #######################

Trinn 2: Dette er koden, IKKE KOPIER OG LIM

Dette er koden, IKKE KOPIER OG LIM
Dette er koden, IKKE KOPIER OG LIM

#################################################### ###################### …….. MERKNAD ……..på grunn av noen irriterende automatisk redigering som instrukser gjør, vil IKKE koden sett på denne siden ARBEID, du MÅ Laste ned filen jeg har lagt ved i stedet for å kopiere og lime inn dette. ################################# ######################################### // Dette ble skrevet i c ++ av leevonk // det er kode for en matlab mex -fil // koden tar inn en tallverdi og sender ut to tallverdier // de to utdatatallene beregnes ut fra inngangstallet // koden vil også sende ut en strengverdi // koden vil skriv også ut "hei verden" #include "mex.h" void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############# ############################# // #######-skriv ut "hei verden"-### ######### // ######################################### ### mexPrintf ("Hei verden"); // ###################################### ##### // #########-Få ting fra Matlab-########## // ################# ###########################/ * erklær en matrisvariabel for å holde de innkommende verdiene*/dobbelt* InValues;/* få verdiene sendt fra matlab*/InValues = mxGetPr (prhs [0]);/* for å bruke disse verdiene som ble sendt fra matlab, gjør InValues [0], InValue [1], osv. I henhold til hvor mange verdier det er. InValues vil bli brukt under */// ########################################## ## // #########-Returner et tallarray-############################### #########################/ * erklærer matrisen som skal sendes til matlab (* gjør det til en matrise) */double * OutValues;/ * Opprett/tildel returargument, en 1x2 (1 rad 2 kolonne) Matrise for returmatrisens første spor (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Få pekeren til returargumentet */OutValues = mxGetPr (plhs [0]); / * tilordne verdier til OutValues som vil ligge i returmatrisens første spor, her bruker vi InValues til å datamaskinere OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ############################################# // ############ Returner en streng-############# // ################## ###########################/* erklærer strengvariabelen for å bli sendt til matlab*/char* str;/* tilordne en verdi til string */str = "byebye";/ *sett strengen i retursystemets andre spor (plhs [1]) */plhs [1] = mxCreateString (str); // ########### ##################################//###########--komme tilbake flere ting-############# // ################################## #############/ * for å returnere flere ting, følg generelle regler ovenfor, men legg tingene i andre plhs -spor, plhs [somenumber] */}

Trinn 3: Hvis det av en eller annen grunn ikke kompileres

Hvis det av en eller annen grunn ikke kompileres
Hvis det av en eller annen grunn ikke kompileres

Hvis den av en eller annen grunn ikke kompilerer (den burde fungere bra på datamaskinen min) ser disse ressursene, de er der jeg lærte av. De har små feil (bruk litt gammel, ikke -funksjonell grammatikk, osv.), Men hvis du går frem og tilbake mellom de to, bør du kunne kobbe sammen noe som fungerer. Http://web.ccr.jussieu.fr/ccr/ Documentation/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Anbefalt: