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, Studeni
Anonim
Izrada Matlab MEX datoteke
Izrada Matlab MEX datoteke

Upute o tome kako integrirati sastavljeni 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 se sastave, 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. Što ćete potrebno: = uređivač teksta = matlab 6.1 ili novija verzija (starije verzije mogu raditi i s mex datotekama, ali nešto drugačijeg formata) = matlab ima vlastiti c kompajler koji dolazi s njim, ali ja sam koristio vizualni c ++ kompajler jer sam ga imao.

Korak 1: Kôd

Kod
Kod

preuzmite datoteku koju sam priložio: mextest1p0.cpp

cpp znači c ++ ……… Ovo je ono što kôd radi: ……… potreban je broj koji ste mu poslali iz naredbenog retka matlab. Ispisuje "hello world" u matlab -u, vraća dva argumenta u matlab, niz s 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 ove upute 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 se oko "upozorenja naredbenog retka", čini se da ništa ne utječe. Napomena 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 trebate slijedeći konvencije u kodu (tj. Kopirati i lijepiti je i napraviti 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 dosadnog automatskog uređivanja koje instrukcije rade, kôd prikazan na ovoj stranici NEĆE RADITE, MORATE PREUZETI DATOTEKU koju sam priložio umjesto da kopirate i zalijepite ovo. ############################## ####################################### // Ovo je na c ++ napisao leevonk // to je kod za matlab mex datoteku // kôd će uzeti jednu brojčanu vrijednost i ispisati dvije brojevne vrijednosti // dva izlazna broja se izračunavaju 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 ("Pozdrav svijetu"); // ################################### ##### // ########-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 matlaba, 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;/ * Stvorite/dodijelite povratni argument, 1x2 (1 redak 2 stupac) matricu za prvi utor polja za povratak (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Dohvati pokazivač na povratni argument */OutValues = mxGetPr (plhs [0]); / * dodijelite vrijednosti OutValues koje će se nalaziti u prvom utoru polja za povratak, ovdje koristimo InValues za računanje OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ########################################## // ###########-Vraća niz-############# // ################# ###########################/* deklarira varijablu niza koja se šalje u matlab*/char* str;/* dodjeljuje vrijednost string */str = "byebye";/ *stavite niz u drugi utor polja za vraćanje (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 unose 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 bilo kojeg razloga ne kompilira (trebao bi, radi dobro na mom računalu) vidjeti ove resurse, od njih sam naučio. Imaju malih grešaka (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čeni: