Obsah:

Vytvoření souboru Matlab MEX: 3 kroky
Vytvoření souboru Matlab MEX: 3 kroky

Video: Vytvoření souboru Matlab MEX: 3 kroky

Video: Vytvoření souboru Matlab MEX: 3 kroky
Video: MNM T3 149191 Flimel Matlab Lab 1 2024, Červenec
Anonim
Vytvoření souboru Matlab MEX
Vytvoření souboru Matlab MEX

Pokyny k integraci zkompilovaného kódu C do Matlabu. MEX znamená spustitelný soubor MATLAB. Soubory MEX jsou dynamicky propojené podprogramy vytvořené ze zdrojového kódu C nebo Fortran, které při kompilaci lze spouštět z prostředí MATLAB stejným způsobem jako soubory MATLAB M nebo vestavěné funkce. Funkce externího rozhraní poskytují funkce pro přenos dat mezi soubory MEX a MATLAB a možnost volat funkce MATLAB z kódu C nebo Fortran. Zde vám ukážu vše, co potřebujete k rychlému vytvoření užitečného souboru mex. Co budete potřeba: = textový editor = matlab 6.1 nebo vyšší (dřívější verze umí i soubory mex, ale trochu jiný formát) = matlab má vlastní kompilátor c, který je dodáván s ním, ale použil jsem vizuální kompilátor c ++, protože jsem ho měl.

Krok 1: Kód

Kód
Kód

stáhněte soubor, který jsem připojil: mextest1p0.cpp

cpp znamená c ++ ……… K tomu slouží kód: ……… trvá číslo, které mu odešlete z příkazového řádku matlab. Vytiskne „ahoj svět“v matlabu, vrátí do matlabu dva argumenty, pole s dvěma prvky a řetězec, první prvek vráceného číselného pole je 1 + číslo, které jste mu poslali, druhý prvek vráceného číselného pole je 2 + číslo, které jste mu poslali ………. Takto ho implementujete: ………… uložte soubor do počítače, spusťte matlab, přejděte v matlabu do adresáře, kde je soubor, a poté postupujte podle pokynů pro kompilaci a spuštění v horní části.cpp soubor. Nemohu zde psát tyto pokyny, protože instructables automaticky upravuje příkazy a způsobuje, že se zobrazují nesprávně. Na obrázku níže vidíte, jak kód funguje. Nebojte se „varování na příkazovém řádku“, zdá se, že to nic neovlivňuje. Všimněte si na levé straně, že aktuální adresář obsahuje soubor.cpp. Vpravo mě můžete vidět kompilovat kód a poté jej spouštět z matlabu. Přečtěte si soubor ve svém textovém editoru (například poznámkový blok ve Windows), je velmi dobře zdokumentovaný a samovysvětlující, budete moci dělat téměř vše, co potřebujete, dodržováním konvencí v kódu (tj. Jeho kopírování a vkládání a vytváření mírné úpravy) ######################################################################## ########################### …….. UPOZORNĚNÍ …….. kvůli nějakým nepříjemným automatickým úpravám, které instructables dělá, kód, jak je vidět na další stránka NEFUNGUJE, MUSÍTE STÁHNOUT SOUBOR, který jsem připojil, místo toho, abyste toto zkopírovali a vložili. ############################################################################# ##########################

Krok 2: Toto je kód, NEKOPÍROVAT A VELIKOST

Toto je kód, NEKOPÍROVAT A VELIT
Toto je kód, NEKOPÍROVAT A VELIT

#############################################################################. PRACUJTE, MUSÍTE STÁHNOUT SOUBOR, který jsem připojil, místo toho, abyste to zkopírovali a vložili. ##################################### ############################################## // Toto v c ++ napsal leevonk // je to kód pro soubor matlab mex // kód převezme jednu číselnou hodnotu a vydá dvě číselné hodnoty // dvě výstupní čísla se vypočítají ze vstupního čísla // kód také vygeneruje hodnotu řetězce // kód bude také vytisknout „hello world“#include „mex.h“void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############### ################################## // #########-tisk „ahoj svět“-### ######### // //############################################### ### mexPrintf („Hello world“); // ######################################### ##### // #########-Získejte věci z Matlabu-########### // ################### ##############################/ * deklarujte proměnnou pole pro uchování příchozích hodnot*/double* InValues;/* získejte hodnoty odeslané z matlabu*/InValues = mxGetPr (prhs [0]);/* pro použití těchto hodnot, které byly odeslány z matlabu, proveďte InValues [0], InValue [1], atd. Podle toho, kolik hodnot existuje. Hodnoty InValues budou použity níže */// ############################################# ## // #########-Vraťte pole čísel-########## // ###################### ###########################/ * deklarujte pole, které bude odesláno do matlabu (* z něj dělá pole) */zdvojnásobte * OutValues;/ * Vytvořit/alokovat návratový argument, matice 1x2 (1 řádek 2 sloupec) pro první slot návratového pole (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Získat ukazatel na návratový argument */OutValues = mxGetPr (plhs [0]); / * přiřaďte hodnoty OutValues, které budou umístěny v prvním slotu návratového pole, zde používáme InValues k výpočtu OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ################################################## // ############-Return a String-############### // #################### ###############################/* deklarujte proměnnou řetězce, která má být odeslána do matlabu*/char* str;/* přiřaďte hodnotu string */str = "byebye";/ *vložte řetězec do druhého slotu návratových polí (plhs [1]) */plhs [1] = mxCreateString (str); // ########### ##################################//###########--vrátit se více věcí-############# // ###################################### ##############/ * Chcete -li vrátit více věcí, řiďte se výše uvedenými obecnými pravidly, ale vložte věci do jiných slotů plhs, plhs [somenumber] */}

Krok 3: Pokud z jakéhokoli důvodu nebude kompilován

Pokud se z jakéhokoli důvodu nekomplikuje
Pokud se z jakéhokoli důvodu nekomplikuje

Pokud z jakéhokoli důvodu nekompilová (mělo by to fungovat dobře na mém počítači), podívejte se na tyto zdroje, odkud jsem se poučil. Mají malé závady (použijte nějakou starou, nefunkční gramatiku atd.), Ale pokud se mezi nimi pohybujete tam a zpět, měli byste být schopni spojit dohromady něco, co funguje. Https://web.ccr.jussieu.fr/ccr/ Dokumentace/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Doporučuje: