Съдържание:

Създаване на Matlab MEX файл: 3 стъпки
Създаване на Matlab MEX файл: 3 стъпки

Видео: Създаване на Matlab MEX файл: 3 стъпки

Видео: Създаване на Matlab MEX файл: 3 стъпки
Видео: Statistical Programming with R by Connor Harris 2024, Септември
Anonim
Създаване на MLAX файл на Matlab
Създаване на MLAX файл на Matlab

Инструкции как да интегрирате компилиран C код с Matlab. MEX означава MATLAB Executable. MEX-файловете са динамично свързани подпрограми, произведени от C или Fortran изходен код, които при компилиране могат да се изпълняват от MATLAB по същия начин като M-файловете MATLAB или вградени функции. Външните интерфейсни функции осигуряват функционалност за прехвърляне на данни между MEX-файлове и MATLAB, както и възможност за извикване на MATLAB функции от C или Fortran код. Тук ще ви покажа всичко необходимо, за да направите бързо полезен mex файл. Какво ще нужда от: = текстов редактор = matlab 6.1 или по -нова версия (по -ранните версии могат да правят и mex файлове, но малко по -различен формат) = matlab има собствен компилатор на c, който идва с него, но използвах визуален компилатор на c ++, защото го имах.

Стъпка 1: Кодът

Кодът
Кодът

изтеглете прикачения от мен файл: mextest1p0.cpp

cpp означава c ++ ……… Това прави кодът: ……… отнема номер, който му изпращате от командния ред на matlab. Той отпечатва "здравей свят" в matlab, връща два аргумента в matlab, масив с два елемента и низ, първият елемент от върнатия масив от числа е 1 + числото, което сте му изпратили, вторият елемент от върнатия масив от числа е 2 + номерът, който сте му изпратили ………. Ето как да го приложите: ………… запишете файла на компютъра си Стартирайте MATLAB навигирайте в MATLAB до директорията, където е файлът, след това следвайте инструкциите за компилиране и изпълнение в горната част на.cpp файл. Не мога да напиша тези инструкции тук, защото инструкциите автоматично редактират командите и ги карат да се показват неправилно. На снимката по -долу можете да видите кода да работи. Не се притеснявайте за „предупреждението за командния ред“, изглежда не влияе на нищо. Забележете от лявата страна, текущата директория съдържа.cpp файла. Вдясно можете да ме видите как компилирам кода и след това го изпълнявам от matlab. Прочетете файла във вашия текстов редактор (например бележник в Windows), той е много добре документиран и обяснителен, ще можете да правите почти всичко, от което се нуждаете, като следвате конвенциите в кода (т.е. копирате и поставяте и правите леки изменения) ############################################### ######################### …….. ЗАБЕЛЕЖКА …….. поради някакво досадно автоматично редактиране, което правят инструкциите, кодът, както се вижда на следващата страница НЯМА ДА РАБОТИ, ТРЯБВА ДА ИЗТЕГЛИТЕ ФАЙЛА, който прикачих, вместо да копирате и поставите това. ################################################# #######################

Стъпка 2: Това е кодът, НЕ КОПИРАЙТЕ И ПАСТЕЙТЕ

Това е Кодът, НЕ КОПИРАЙТЕ И ПАСТЕЙТЕ
Това е Кодът, НЕ КОПИРАЙТЕ И ПАСТЕЙТЕ

################################################# ###################### …….. ЗАБЕЛЕЖКА ……..заради някои досадни автоматични редакции, които правят инструкциите, кодът, както се вижда на тази страница, НЯМА РАБОТЕТЕ, ТРЯБВА ДА ИЗТЕГЛЕТЕ ФАЙЛА, който прикачих, вместо да копирате и поставите това. ############################## ######################################## // Това е написано на c ++ от leevonk // това е код за melax файл на matlab // кодът ще приеме една цифрова стойност и ще изведе две числови стойности // двете изходни числа се изчисляват от входящия номер // кодът също ще изведе низова стойност // кодът ще също отпечатайте "здравей свят" #включете "mex.h" void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############### ############################# // ########-отпечатайте „hello world“-### ########## // ###################################### ### mexPrintf ("Здравей свят"); // ################################### ##### // ########-Вземете неща от Matlab-######### // ################ ###########################/ * декларирайте променлива на масив, за да държите входящите стойности*/double* InValues;/* получавайте стойностите, изпратени от matlab*/InValues = mxGetPr (prhs [0]);/* за да използвате тези стойности, изпратени от matlab, направете InValues [0], InValue [1], съобразно колко стойности има. InValues ще се използват по -долу */// ####################################### ## // ########-Връща масив от числа-######### // ################### ########################/ * декларира масива, който ще бъде изпратен в matlab (* го прави масив) */double * OutValues;/ * Създайте/разпределете аргумент за връщане, 1x2 (1 ред 2 колона) Матрица за първия слот на масив за връщане (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Вземете указател към връщащия аргумент */OutValues = mxGetPr (plhs [0]); / * присвояваме стойности на OutValues, които ще се намират в първия слот на масив за връщане, тук използваме InValues за компютъра на OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ########################################## // ###########-Връщане на низ-############# // ################ ###########################/* декларира низовата променлива, която да бъде изпратена до matlab*/char* str; string */str = "byebye";/ *поставете низа във втория слот на възвръщащите масиви (plhs [1]) */plhs [1] = mxCreateString (str); // ########## ################################### // #############-връщане още неща-############ // ############################### ############/ *, за да върнете още неща, следвайте общите правила по -горе, но поставете нещата в други слотове за plhs, plhs [някакъв брой] */}

Стъпка 3: Ако по някаква причина не се компилира

Ако по каквато и да е причина не се компилира
Ако по каквато и да е причина не се компилира

Ако по някаква причина не се компилира (би трябвало, работи добре на компютъра ми) вижда тези ресурси, от тях научих. Те имат малки проблеми (използването на някаква стара, нефункционална граматика и т.н.), но ако вървите напред -назад между двете, трябва да можете да съберете заедно нещо, което работи. Документация/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Препоръчано: