Мазмуну:

Matlab MEX файлын түзүү: 3 кадам
Matlab MEX файлын түзүү: 3 кадам

Video: Matlab MEX файлын түзүү: 3 кадам

Video: Matlab MEX файлын түзүү: 3 кадам
Video: Matlab для электронщика - Урок 6 - Использование C / C++ кода, MEX файлы 2024, Ноябрь
Anonim
Matlab MEX файлын түзүү
Matlab MEX файлын түзүү

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

1 -кадам: Код

Кодекс
Кодекс

тиркелген файлды жүктөп алыңыз: mextest1p0.cpp

cpp c ++ дегенди билдирет ……… Бул код эмне кылат: ……… аны matlab буйрук сабынан жөнөткөн номер керек. Ал matlabке "салам дүйнө" дегенди басып чыгарат, ал эки аргументти matlabке кайтарат, эки элементтин номери массиви жана сап Кайтып келген сан массивинин биринчи элементи 1 + сиз жиберген сан, кайтарылган сан массивинин экинчи элементи 2 + Сиз жөнөткөн номер ………. Муну кантип ишке ашыруу керек: ………… файлды компьютериңизге сактоо matlabти баштоо matlabте файл жайгашкан каталогго өтүңүз, андан кийин файлдын жогору жагындагы компиляция жана аткаруу көрсөтмөлөрүн аткарыңыз..cpp файлы. Мен бул көрсөтмөлөрдү бул жерге жаза албайм, анткени көрсөтмөлөр командаларды автоматтык түрдө түзөтүп, аларды туура эмес кылып көрсөтөт. Төмөндөгү сүрөттө сиз иштеп жаткан кодду көрө аласыз. "Командалык сап эскертүүсү" жөнүндө кабатыр болбоңуз, бул эч нерсеге таасир бербейт окшойт. Сол жагында эскертүү, учурдагы каталогдо.cpp файлы бар. Оң жакта сиз мени кодду түзүп, анан аны matlabтан аткарып жатканымды көрө аласыз. Файлды текст редакторуңуздан окуңуз (мисалы, терезелердеги блокнот), ал абдан жакшы документтештирилген жана өзүнөн өзү түшүнүктүү, сиз коддогу эрежелерди сактоо менен керектүү нерселердин бардыгын жасай аласыз (б.а. көчүрүү, чаптоо жана жасоо) кичине өзгөртүүлөр) ################################################### ########################## …….. ЭСКЕРТҮҮ …….. анткени инструкторлор автоматтык түрдө оңдоп-түзөгөндүктөн, коду кийинки барак ИШТЕБЕЙТ, муну көчүрүү жана чаптоо ордуна мен тиркеген ФАЙЛДЫ ЖҮКТӨП АЛУУ КЕРЕК. #################################################### #########################

2 -кадам: Бул Кодекс, КӨЧҮРҮП ЖАНА КОЙУУГА БОЛБО

Бул Кодекс, КӨЧҮРҮП ЖАНА КОЙУУГА БОЛБО
Бул Кодекс, КӨЧҮРҮП ЖАНА КОЙУУГА БОЛБО

#################################################### ###################### …….. ЭСКЕРТҮҮ ………. инструкторлордун кылган кээ бир тажатма авто-түзөтүүлөрүнүн себебинен, бул бетте көрүнгөн код ЭМЕС ИШТЕҢИЗ, муну көчүрүп, чаптоонун ордуна мен тиркеген ФАЙЛДЫ ЖҮКТӨП АЛУУ КЕРЕК. ################################# ############################################ Бул c ++ тилинде leevonk тарабынан жазылган // бул matlab mex файлынын коду // код бир сан маанисин алат жана эки сан маанисин чыгарат // эки чыгуу саны кириш санынан эсептелет // код ошондой эле сап маанисин чыгарат // код болот ошондой эле "салам дүйнө" басып чыгарыңыз#mex.h "void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############# ########################################-басып чыгаруу "салам дүйнө"-### #################################################### ### mexPrintf ("Салам дүйнө"); // ###################################### ##### // #########-Matlabтан нерселерди алыңыз-########################### ############################/ * Кирүүчү баалуулуктарды кармоо үчүн массивдин өзгөрмөсүн жарыялаңыз*/кош* InValues;/* matlabтан жөнөтүлгөн баалуулуктарды алуу*/InValues = mxGetPr (prhs [0]);/* matlabтан жөнөтүлгөн бул баалуулуктарды колдонуу үчүн InValues кылыңыз. [0], InValue [1], ж.б канча баалуулукка жараша. InValues төмөндө колдонулат */// ######################################### ## // ########-Сан массивин кайтаруу-########## // ################### ######################## * * matlabка жөнөтүлө турган массивди жарыялоо (* аны массив кылат) */кош * 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 [somenumber] */}

3 -кадам: Эгерде кандайдыр бир себеп менен ал компиляцияланбаса

Эгерде кандайдыр бир себеп менен ал компиляцияланбаса
Эгерде кандайдыр бир себеп менен ал компиляцияланбаса

Эгерде кандайдыр бир себептерден улам ал компиляцияланбаса (ал менин компьютеримде жакшы иштейт) бул ресурстарды көрсө, алар мен үйрөнгөн жерим. Алардын кичинекей мүчүлүштүктөрү бар (кээ бир эски, иштебей турган грамматиканы ж. Б.), Бирок эгер сиз экөөнүн ортосунда артка жана артка кайтсаңыз, иштей турган нерсени бириктире алышыңыз керек. Документтер/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Сунушталууда: