Taula de continguts:

Creació d'un fitxer Matlab MEX: 3 passos
Creació d'un fitxer Matlab MEX: 3 passos

Vídeo: Creació d'un fitxer Matlab MEX: 3 passos

Vídeo: Creació d'un fitxer Matlab MEX: 3 passos
Vídeo: Golang vs Python #shorts tiktok hackmymozg 2024, De novembre
Anonim
Creació d’un fitxer MEX Matlab
Creació d’un fitxer MEX Matlab

Instruccions sobre com integrar el codi C compilat amb Matlab. MEX significa MATLAB Executable. Els fitxers MEX són subrutines enllaçades dinàmicament produïdes a partir del codi font C o Fortran que, quan es compilen, es poden executar des de MATLAB de la mateixa manera que els fitxers M de MATLAB o les funcions incorporades. Les funcions d’interfície externa ofereixen funcionalitat per transferir dades entre fitxers MEX i MATLAB i la possibilitat de trucar a funcions MATLAB des del codi C o Fortran. Aquí us mostraré tot el que necessiteu per fer ràpidament un fitxer mex útil. need: = un editor de text = matlab 6.1 o superior (les versions anteriors també poden fer fitxers mex però amb format lleugerament diferent) = matlab té el seu propi compilador de c que ve amb ell, però he utilitzat el compilador visual c ++ perquè el tenia.

Pas 1: el codi

El codi
El codi

descarregueu el fitxer que he adjuntat: mextest1p0.cpp

cpp significa c ++ ……… Això és el que fa el codi: ……… es necessita un número que l’envieu des del símbol del sistema matlab. Imprimeix "hola món" a matlab, retorna dos arguments a matlab, una matriu de dos elements i una cadena; el primer element de la matriu de números retornats és 1 + el número que li heu enviat; el segon element de la matriu de números retornat és 2 +. el número que li heu enviat ………. Aquesta és la manera d’implementar-lo: ………… deseu el fitxer a l’ordinador inicieu matlab navegueu a matlab fins al directori on es troba el fitxer i seguiu les instruccions de compilació i execució a la part superior del fitxer.cpp. No puc escriure aquestes instruccions aquí perquè les instruccions editen automàticament les ordres i les fan aparèixer incorrectament. A la imatge següent podeu veure el codi que funciona. No us preocupeu per l '"avís de línia d'ordres", sembla que no afecta res. Fixeu-vos a la part esquerra que el directori actual conté el fitxer.cpp. A la dreta em podeu veure compilant el codi i executant-lo des de matlab. Llegiu el fitxer de l’editor de text (per exemple, el bloc de notes al Windows), està molt ben documentat i s’explica per si mateix, podreu fer gairebé tot el que necessiteu seguint les convencions del codi (és a dir, copiant-lo i enganxant-lo i fent lleugeres modificacions) ###################################################. la pàgina següent NO FUNCIONARÀ, heu de descarregar el fitxer que he adjuntat en lloc de copiar-lo i enganxar-lo. ####################################################### #######################

Pas 2: aquest és el codi, NO COPIEU I ENGUINEU

Aquest és el codi, NO COPIEU I ENGUINEU
Aquest és el codi, NO COPIEU I ENGUINEU

####################################################### ###################### …….. NOTA …….. degut a una molesta autoedició que fan els instructables, el codi que es veu en aquesta pàgina NO FUNCIONA, HAU DE DESCARREGAR EL FITXER que he adjuntat en lloc de copiar-lo i enganxar-lo. #################################### ######################################## // va ser escrit en c ++ per leevonk // és codi per a un fitxer matlab mex // el codi prendrà un valor numèric i generarà dos valors numèrics // els dos números de sortida es calculen a partir del número d’entrada // el codi també generarà un valor de cadena // el codi també imprimiu "hola world" #include "mex.h" void mexFunction (int nlhs, mxArray * plhs , int nrhs, mxArray * prhs ) {// ############## ############################## // ####### - imprimeix "hola món" - ### ######### // ########################################### ### mexPrintf ("Hola món"); // ######################################### ##### // ######## - Obteniu coses de Matlab - ######### // ################## ########################### / * declareu una variable de matriu per contenir les vales entrants * / double * InValues; / * obteniu els valors enviats des de matlab * / InValues = mxGetPr (prhs [0]); / * per utilitzar aquests valors que s’envien des de matlab, feu InValues [0], InValue [1], etc segons quants valors hi ha. Els InValues s’utilitzaran a continuació * /// ########################################### ## // ######## - Retorna una matriu de números - ########## // ###################### ######################## / * declareu la matriu que s'enviarà a matlab (el * fa que sigui una matriu) * / doble * OutValues; / * Creeu / assigneu un argument de retorn, una matriu 1x2 (1 fila 2) per a la primera ranura de la matriu de retorn (plhs [0]) * / plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Obteniu el punter a l'argument de retorn * / OutValues = mxGetPr (plhs [0]); / * assigneu valors a OutValues que residiran a la primera ranura de la matriu de retorn; aquí estem utilitzant els InValues per a computar els OutValues * / OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ############################################### // ########### - Retorna una cadena - ############# // // #################### ########################### / * declareu la variable de cadena que s'enviarà a matlab * / char * str; / * assigneu un valor al string * / str = "byebye"; / * introduïu la cadena a la segona ranura de les matrius de retorn (plhs [1]) * / plhs [1] = mxCreateString (str); // ########## ################################### // ############ - tornar més coses - ############ // #################################### ############# * * per tornar més coses, seguiu les regles generals anteriors, però poseu-les en altres espais de plhs, plhs [somenumber] * /}

Pas 3: si per qualsevol motiu no es compila

Si per qualsevol motiu no es compila
Si per qualsevol motiu no es compila

Si per qualsevol motiu no compila (hauria de funcionar bé al meu ordinador), veuen aquests recursos, aquí vaig aprendre. Tenen petits problemes (utilitzen alguna gramàtica antiga i no funcional, etc.), però si aneu i torneu entre tots dos, hauríeu de ser capaços de llançar alguna cosa que funcioni. Documentació / Calcul / matlab5v11 / docs / 00009 / 009a1.htmhttps://cnx.org/content/m12348/latest/

Recomanat: