Cuprins:

Realizarea unui fișier Matlab MEX: 3 pași
Realizarea unui fișier Matlab MEX: 3 pași

Video: Realizarea unui fișier Matlab MEX: 3 pași

Video: Realizarea unui fișier Matlab MEX: 3 pași
Video: 1. Crearea și editarea fișierelor pdf. 2024, Iulie
Anonim
Realizarea unui fișier Matlab MEX
Realizarea unui fișier Matlab MEX

Instrucțiuni despre modul de integrare a codului C compilat cu Matlab. MEX înseamnă MATLAB Executable. Fișierele MEX sunt subrutine legate dinamic produse din codul sursă C sau Fortran care, atunci când sunt compilate, pot fi rulate din MATLAB în același mod ca fișierele M MATLAB sau funcții încorporate. Funcțiile de interfață externă oferă funcționalitate pentru a transfera date între fișiere MEX și MATLAB și posibilitatea de a apela funcții MATLAB din codul C sau Fortran. Aici vă voi arăta tot ce aveți nevoie pentru a face rapid un fișier mex util. nevoie: = un editor de text = matlab 6.1 sau o versiune anterioară (versiunile anterioare pot face și fișiere mex, dar un format ușor diferit) = matlab are propriul compilator c care vine cu el, dar am folosit compilatorul vizual c ++ pentru că îl aveam.

Pasul 1: Codul

Codul
Codul

descărcați fișierul pe care l-am atașat: mextest1p0.cpp

cpp înseamnă c ++ ……… Aceasta este ceea ce face codul: ……… este nevoie de un număr pe care îl trimiteți de la promptul de comandă matlab. Tipărește „hello world” în matlab returnează două argumente la matlab, un array cu două elemente și un șir primul element al matricei numerice returnate este 1 + numărul pe care i-ai trimis al doilea element al matricei numerice returnate este 2 + numărul pe care l-ați trimis ………. Iată cum să îl implementați: ………… salvați fișierul pe computer începeți matlab navigați în matlab în directorul unde este fișierul, apoi urmați instrucțiunile de compilare și execuție din partea de sus a fișier.cpp. Nu pot scrie aceste instrucțiuni aici, deoarece instructabilele editează automat comenzile și le fac să apară incorect. În imaginea de mai jos puteți vedea codul de lucru. Nu vă faceți griji cu privire la „avertismentul pe linia de comandă”, nu pare să efectueze nimic. Observați în partea stângă, directorul curent conține fișierul.cpp. În dreapta mă puteți vedea compilând codul și apoi executându-l din matlab. Citiți fișierul din editorul dvs. de text (de exemplu, blocnotesul în Windows), este foarte bine documentat și explicativ, veți putea face aproape orice aveți nevoie urmând convențiile din cod (adică copierea și lipirea acestuia și realizarea modificări ușoare) ################################################### #! pagina următoare nu va funcționa, trebuie să descărcați fișierul pe care l-am atașat în loc să copiați și să lipiți acest lucru. ###################################################### #######################

Pasul 2: Acesta este Codul, NU COPIAȚI ȘI PASTAȚI

Acesta este Codul, NU COPIAȚI ȘI PASTAȚI
Acesta este Codul, NU COPIAȚI ȘI PASTAȚI

###################################################### #! FUNCȚIONEAZĂ, TREBUIE SĂ DESCARCAȚI FIȘIERUL pe care l-am atașat în loc să copiați și să lipiți acest lucru. #################################### ####################################### // A fost scris în c ++ de leevonk // este cod pentru un fișier matlab mex // codul va lua o valoare numerică și va afișa două valori numerice // cele două numere de ieșire sunt calculate din numărul de intrare // codul va afișa și o valoare șir // codul va de asemenea, tipăriți „hello world” #include „mex.h” void mexFunction (int nlhs, mxArray * plhs , int nrhs, mxArray * prhs ) {// ############## ############################## // ####### - tipăriți „hello world” - ### ######### // ########################################### ### mexPrintf („Hello world”); // ######################################### ##### // ######## - Obține lucruri de la Matlab - ######### // ################## ########################### / * declarați o variabilă matrice pentru a păstra valorile de intrare * / double * InValues; / * obțineți valorile trimise de la matlab * / InValues = mxGetPr (prhs [0]); / * pentru a utiliza aceste valori care au fost trimise de la matlab, faceți InValues [0], InValue [1], etc în funcție de câte valori există. Valorile InValues vor fi utilizate mai jos * /// ########################################### ## // ######## - Returnează o matrice de numere - ########## // ######################. * Creați / alocați argumentul de returnare, o matrice 1x2 (1 rând 2) Matrice pentru primul slot al matricei de returnare (plhs [0]) * / plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Obțineți indicatorul către argumentul return * / OutValues = mxGetPr (plhs [0]); / * atribuiți valori OutValues care vor locui în primul slot al matricei de returnare, aici folosim InValues pentru a calcula OutValues * / OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ############################################## // ########### - Returnează un șir - ############# // // #################### ########################### / * declarați variabila șir care trebuie trimisă matlab * / char * str; / * atribuiți o valoare șir * / str = "byebye"; / * pune șirul în al doilea slot al matricilor de returnare (plhs [1]) * / plhs [1] = mxCreateString (str); // ########### ##################################//###########--întoarcere mai multe lucruri--############//################################ ############# * * pentru a returna mai multe lucruri, urmați regulile generale de mai sus, dar introduceți lucrurile în alte sloturi plhs, plhs [somenumber] * /}

Pasul 3: dacă din orice motiv nu se compilează

Dacă din orice motiv nu se compilează
Dacă din orice motiv nu se compilează

Dacă din orice motiv nu compilează (ar trebui să funcționeze bine pe computerul meu), văd aceste resurse, de unde am învățat. Au mici greșeli (folosesc o gramatică veche, nefuncțională, etc), dar dacă te duci înainte și înapoi între cele două, ar trebui să poți să aduni ceva care funcționează. Http://web.ccr.jussieu.fr/ccr/ Documentație / Calcul / matlab5v11 / docs / 00009 / 009a1.htmhttps://cnx.org/content/m12348/latest/

Recomandat: