Obsah:

Vytvorenie súboru Matlab MEX: 3 kroky
Vytvorenie súboru Matlab MEX: 3 kroky

Video: Vytvorenie súboru Matlab MEX: 3 kroky

Video: Vytvorenie súboru Matlab MEX: 3 kroky
Video: Inline 4 Crossplane Vs Flatplane Cranks Sound 2024, November
Anonim
Vytvorenie súboru Matlab MEX
Vytvorenie súboru Matlab MEX

Pokyny na integráciu skompilovaného kódu C do programu Matlab. MEX znamená spustiteľný súbor MATLAB. Súbory MEX sú dynamicky prepojené podprogramy vytvorené zo zdrojového kódu C alebo Fortran, ktoré je možné pri kompilácii spustiť z prostredia MATLAB rovnakým spôsobom ako súbory M MATLAB M alebo vstavané funkcie. Funkcie externého rozhrania poskytujú funkcie na prenos údajov medzi súbormi MEX a MATLAB a možnosť volať funkcie MATLAB z kódu C alebo Fortran. Tu vám ukážem všetko, čo potrebujete na rýchle vytvorenie užitočného súboru mex. Čo budete potreba: = textový editor = matlab 6.1 alebo vyšší (staršie verzie môžu robiť aj súbory mex, ale mierne odlišný formát) = matlab má vlastný kompilátor c, ktorý je súčasťou, ale použil som vizuálny kompilátor c ++, pretože som ho mal.

Krok 1: Kód

Kód
Kód

stiahnite si priložený súbor: mextest1p0.cpp

cpp je skratka pre c ++ ……… K tomu slúži kód: ……… trvá číslo, ktoré mu pošlete z príkazového riadka matlab. Vytlačí "ahoj svet" v matlabe, vráti dva argumenty do matlabu, pole s dvoma prvkami a reťazec, prvý prvok vráteného číselného poľa je 1 + číslo, ktoré ste mu poslali, druhý prvok vráteného číselného poľa je 2 + číslo, ktoré ste mu poslali ………. Takto ho implementujete: ………… uložte súbor do počítača spustite matlab navigujte v matlabe do adresára, kde sa súbor nachádza, potom postupujte podľa pokynov na kompiláciu a spustenie v hornej časti.cpp súbor. Nemôžem sem písať tieto pokyny, pretože inštrukcie automaticky upravujú príkazy a spôsobujú, že sa zobrazujú nesprávne. Na obrázku nižšie vidíte, ako kód funguje. Nerobte si starosti s „upozornením príkazového riadka“, zdá sa, že to nič neovplyvňuje. Všimnite si na ľavej strane, že aktuálny adresár obsahuje súbor.cpp. Vpravo ma môžete vidieť zostavovať kód a potom ho vykonávať z matlabu. Prečítajte si súbor v textovom editore (napríklad poznámkový blok v oknách), je veľmi dobre zdokumentovaný a vysvetľuje sa, že budete môcť urobiť takmer všetko, čo potrebujete, podľa konvencií v kóde (tj skopírujte ho a prilepte a vytvorte mierne úpravy) ####################################################################### ###########################… …….. UPOZORNENIE …….. kvôli niektorým nepríjemným automatickým úpravám, ktoré robí instructables, kód, ako je vidieť na nasledujúca strana NEFUNGUJE, MUSÍTE STIAHNÚŤ SÚBOR, ktorý som priložil, namiesto kopírovania a prilepovania tohto. ###################################################################### ####### ##########################

Krok 2: Toto je kód, NEKOPÍRUJTE a NEPASTE

Toto je kódex, NEKOPÍRUJTE a NESTAVTE
Toto je kódex, NEKOPÍRUJTE a NESTAVTE

###################################################################### ####### ###################### … PRÁCU, MUSÍTE SI STIAHNÚŤ SÚBOR, ktorý som priložil, namiesto toho, aby ste to skopírovali a prilepili. ##################################### ############################################# // Toto v c ++ napísal leevonk // je to kód pre súbor matlab mex // kód prevezme jednu číselnú hodnotu a vydá dve číselné hodnoty // dve výstupné čísla sa vypočítajú zo vstupného čísla // kód vygeneruje aj reťazcovú hodnotu // kód vytlačiť aj „ahoj svet“#include „mex.h“neplatná mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############### ################################## // #########-vytlačte „ahoj svet“-### ######### // ########################################################################################################################################## ### mexPrintf („Hello world“); // ########################################## ##### // #########-Získajte veci z Matlabu-########### // ################### ###############################/ * deklarujte premennú poľa na uchovávanie prichádzajúcich hodnôt*/double* InValues;/* získajte hodnoty odoslané z matlabu*/InValues = mxGetPr (prhs [0]);/* ak chcete použiť tieto hodnoty, ktoré boli odoslané z matlabu, vykonajte hodnoty InValues [0], InValue [1], a to podľa toho, koľko hodnôt existuje. Hodnoty hodnoty budú použité nižšie */// ############################################# ## // #########-Vráťte pole čísel-########## // ###################### ##########################/ * Vytvoriť/alokovať návratový argument, matica 1x2 (1 stĺpec 2 riadka) pre prvý slot návratového poľa (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Získať ukazovateľ na návratový argument */OutValues = mxGetPr (plhs [0]); / * priraďte hodnoty OutValues, ktoré budú umiestnené v prvom slote návratového poľa, tu používame InValues na výpočet OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ################################################### ############-Return a String-############### // #################### ###############################/* deklaruje, že reťazcová premenná sa má odoslať do matlabu*/char* str;/* priradiť hodnotu string */str = "byebye";/ *vložte reťazec do druhého slotu návratových polí (plhs [1]) */plhs [1] = mxCreateString (str); // ############ ######################################## ################ ďalšie veci-############# // ###################################### ##############/ * ak chcete vrátiť viac vecí, postupujte podľa vyššie uvedených všeobecných pravidiel, ale vložte ich do iných priestorov, plhs [číslo] */}

Krok 3: Ak sa z akéhokoľvek dôvodu nekompiluje

Ak sa to z akéhokoľvek dôvodu neskompiluje
Ak sa to z akéhokoľvek dôvodu neskompiluje

Ak sa z akéhokoľvek dôvodu nekompilová (malo by to fungovať dobre na mojom počítači), pozrite sa na tieto zdroje, odkiaľ som sa poučil. Majú malé chyby (použite starú, nefunkčnú gramatiku atď.), Ale ak sa medzi nimi budete pohybovať tam a späť, mali by ste byť schopní dať dohromady niečo, čo funguje. Https://web.ccr.jussieu.fr/ccr/ Dokumentácia/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Odporúča: