Sadržaj:

Izrada Matlab MEX datoteke: 3 koraka
Izrada Matlab MEX datoteke: 3 koraka

Video: Izrada Matlab MEX datoteke: 3 koraka

Video: Izrada Matlab MEX datoteke: 3 koraka
Video: Проект модели ДНК из картона 2024, Novembar
Anonim
Izrada Matlab MEX datoteke
Izrada Matlab MEX datoteke

Upute o tome kako integrirati prevedeni C kod s Matlabom. MEX znači MATLAB Executable. MEX datoteke su dinamički povezane podrutine proizvedene iz izvornog koda C ili Fortrana koje se, kada su kompajlirane, mogu pokrenuti iz MATLAB-a na isti način kao MATLAB M-datoteke ili ugrađene funkcije. Funkcije vanjskog sučelja pružaju mogućnost prijenosa podataka između MEX-datoteka i MATLAB-a, te mogućnost pozivanja MATLAB funkcija iz C ili Fortran koda. Ovdje ću vam pokazati sve što vam je potrebno za brzu izradu korisne mex datoteke. potrebno: = uređivač teksta = matlab 6.1 ili novija verzija (starije verzije mogu raditi i mex datoteke, ali nešto drugačijeg formata) = matlab ima svoj vlastiti c kompajler koji dolazi s njim, ali sam koristio vizuelni c ++ kompajler jer sam ga imao.

Korak 1: Kôd

Kodeks
Kodeks

preuzmite datoteku koju sam priložio: mextest1p0.cpp

cpp označava c ++ ……… Ovo je ono što kod radi: ……… potreban je broj koji ste mu poslali iz matlab naredbenog retka. Ispisuje "hello world" u matlab -u, vraća dva argumenta u matlab, niz od dva elementa i niz, prvi element vraćenog niza brojeva je 1 + broj koji ste mu poslali, drugi element vraćenog niza brojeva je 2 + broj koji ste mu poslali ……..cpp datoteku. Ne mogu ovdje napisati ova uputstva jer instrukcije automatski uređuju naredbe i čine da se pojavljuju pogrešno. Na donjoj slici možete vidjeti kako kôd radi. Ne brinite o "upozorenju komandne linije", čini se da ništa ne utječe. Primijetite s lijeve strane, trenutni direktorij sadrži.cpp datoteku. S desne strane možete vidjeti kako sastavljam kôd, a zatim ga izvršavam iz matlaba. Pročitajte datoteku u svom uređivaču teksta (na primjer bilježnicu u prozorima), vrlo je dobro dokumentirana i sama po sebi razumljiva, moći ćete učiniti gotovo sve što vam treba slijedeći konvencije u kodu (tj. Kopirate i lijepite je i pravite male izmjene) ############################################### ######################### …….. NAPOMENA …….. zbog nekog dosadnog automatskog uređivanja koje instrukcije rade, kôd koji se vidi na sljedeća stranica NEĆE RADITI, MORATE PREUZETI DATOTEKU koju sam priložio umjesto da je kopirate i zalijepite. ################################################# #######################

Korak 2: Ovo je kôd, NE KOPIRAJTE I LIJEPITE

Ovo je kôd, NE KOPIRAJTE I LIJEPITE
Ovo je kôd, NE KOPIRAJTE I LIJEPITE

################################################# ##################### …….. NAPOMENA ……..zbog nekog dosadnog automatskog uređivanja koje instrukcije rade, kôd prikazan na ovoj stranici NEĆE RADITE, MORATE PREUZETI DATOTEKU koju sam priložio umjesto kopiranja i lijepljenja ove datoteke. ############################## ####################################### // Ovo je na c ++ napisao leevonk // to je kôd za matlab mex datoteku // kôd će uzeti jednu brojčanu vrijednost i ispisati dvije vrijednosti broja // dva izlazna broja se računaju iz ulaznog broja // kôd će također ispisati vrijednost niza // kôd će također ispišite "hello world" #include "mex.h" void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############### ############################# // #######-ispišite "hello world"-### ########## // ###################################### ### mexPrintf ("Zdravo svijete"); // ################################### ##### // #########-Preuzmite stvari od Matlaba-######### // ################ ###########################/ * deklarirajte varijablu niza za držanje dolaznih vrijednosti*/double* InValues;/* dobijte vrijednosti poslane iz matlab*/InValues = mxGetPr (prhs [0]);/* za korištenje ovih vrijednosti poslanih iz matlab -a, učinite InValues [0], InValue [1], itd. Prema broju vrijednosti. InValues će se koristiti ispod */// ####################################### ## // ########-Vraća niz brojeva-######### // ################### ########################/ * deklarirajte niz koji će biti poslan u matlab (* čini ga nizom) */double * OutValues;/ * Kreirajte/dodijelite povratni argument, 1x2 (stupac 1 reda 2) matricu za prvi utor polja za povratak (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Dobijte pokazivač na povratni argument */OutValues = mxGetPr (plhs [0]); / * dodijelite vrijednosti OutValues koje će se nalaziti u prvom utoru povratnog niza, ovdje koristimo InValues za računanje OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ########################################## // ###########-Vraća niz-############# // ################# ###########################/* deklariše promenljivu niza koja se šalje matlab*/char* str;/* dodeljuje vrednost string */str = "byebye";/ *stavite niz u drugi slot povratnih nizova (plhs [1]) */plhs [1] = mxCreateString (str); // ########## ################################## // ############-povratak više stvari-############ // ############################### ############/ * za vraćanje više stvari, slijedite gore navedena opća pravila, ali stavite stvari u druge slotove za plhs, plh [neki broj] */}

Korak 3: Ako se iz bilo kojeg razloga ne sastavlja

Ako se iz bilo kojeg razloga ne sastavlja
Ako se iz bilo kojeg razloga ne sastavlja

Ako iz nekog razloga ne kompajlira (trebalo bi, radi dobro na mom računaru) vidi ove resurse, od njih sam naučio. Imaju malih problema (koristite neku staru, nefunkcionalnu gramatiku itd.), Ali ako idete naprijed -natrag između njih dvoje, trebali biste moći spojiti nešto što funkcionira. Https://web.ccr.jussieu.fr/ccr/ Dokumentacija/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Preporučuje se: