Turinys:

„Matlab MEX“failo sukūrimas: 3 žingsniai
„Matlab MEX“failo sukūrimas: 3 žingsniai

Video: „Matlab MEX“failo sukūrimas: 3 žingsniai

Video: „Matlab MEX“failo sukūrimas: 3 žingsniai
Video: Shock & Vibration 39 Rainflow Cycle Counting for Random Vibration Fatigue Analysis 2024, Liepa
Anonim
„Matlab“MEX failo kūrimas
„Matlab“MEX failo kūrimas

Instrukcijos, kaip integruoti surinktą C kodą su „Matlab“. MEX reiškia „MATLAB Executable“. MEX failai yra dinamiškai susietos paprogramės, sukurtos iš C arba „Fortran“šaltinio kodo, kurias sukomponavus galima paleisti iš MATLAB taip pat, kaip ir MATLAB M failus arba integruotas funkcijas. Išorinės sąsajos funkcijos suteikia galimybę perduoti duomenis iš MEX failų į MATLAB ir gali iškviesti MATLAB funkcijas iš C arba Fortran kodo. Čia parodysiu viską, ko reikia norint greitai sukurti naudingą mex failą. reikia: = teksto rengyklė = matlab 6.1 arba naujesnė versija (ankstesnės versijos taip pat gali daryti „mex“failus, bet šiek tiek kitokio formato) = „matlab“turi savo c kompiliatorių, kuris ateina su juo, bet aš naudoju „visual c ++“kompiliatorių, nes jį turėjau.

1 žingsnis: Kodas

Kodas
Kodas

atsisiųskite failą, kurį pridėjau: mextest1p0.cpp

cpp reiškia c ++ ……… Štai ką daro kodas: ……… reikia skaičiaus, kurį atsiųsite iš „Matlab“komandinės eilutės. „Matlab“atspausdina „labas pasaulis“ir grąžina „Matlab“du argumentus, dviejų elementų skaičių masyvą ir eilutę. Pirmasis grąžinamo skaičių masyvo elementas yra 1 + skaičius, kurį jam išsiuntėte, antrasis grąžinto skaičių masyvo elementas yra 2 + numeris, kurį išsiuntėte ………. Štai kaip jį įgyvendinti: ………… išsaugokite failą savo kompiuteryje paleiskite „matlab“, eikite į „Matlab“katalogą, kuriame yra failas, tada vykdykite kompiliavimo ir vykdymo instrukcijas, esančias viršuje.cpp failą. Negaliu čia parašyti šių instrukcijų, nes instrukcijos automatiškai redaguoja komandas ir priverčia jas rodyti neteisingai. Žemiau esančioje nuotraukoje galite pamatyti, kaip veikia kodas. Nesijaudinkite dėl „komandinės eilutės įspėjimo“, atrodo, kad jis nieko nedaro. Pastaba kairėje pusėje, dabartiniame kataloge yra.cpp failas. Dešinėje matote, kaip aš renku kodą ir vykdau jį iš „Matlab“. Perskaitykite failą savo teksto redaktoriuje (pvz., Užrašų knygelę „Windows“), jis yra labai gerai dokumentuotas ir savaime suprantamas, jūs galėsite padaryti beveik viską, ko jums reikia, laikydamiesi kodo nuostatų (ty nukopijuokite ir įklijuokite jį ir nedideli pakeitimai) ########################### ###### kitas puslapis NEVEIKS, jūs turite ATSISIŲSTI mano pridėtą failą, o ne nukopijuoti ir įklijuoti. ############################################### #####################

2 veiksmas: tai yra kodeksas, NEKOPIUOKITE IR NELEISTI

Tai yra kodeksas, NEKOPIJUOKITE IR NELEISKITE
Tai yra kodeksas, NEKOPIJUOKITE IR NELEISKITE

############################################### ###### DARBAS, jūs turite atsisiųskite mano pridėtą failą, o ne kopijuoti ir įklijuoti. ################## ##################### ### tai yra „Matlab mex“failo kodas // kodas paims vieną skaičių reikšmę ir išves dvi skaičių reikšmes // du išvesties skaičiai apskaičiuojami pagal įvesties skaičių // kodas taip pat išves eilutės reikšmę // kodas taip pat spausdinti "labas pasaulis" #include "mex.h" void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############## ###### ######### // ################################### ### mexPrintf („Labas pasaulis“); // #################################### ##### // ########-Get Stuff From Matlab-########################## ########################## * paskelbti masyvo kintamąjį, kad būtų galima laikyti gaunamus vales*/double* InValues;/* gauti vertes, atsiųstas iš matlab*/InValues = mxGetPr (prhs [0]);/* naudoti šias reikšmes, kurios buvo atsiųstos iš matlab, darykite InValues [0], „InValue“[1] ir kt. Pagal tai, kiek yra reikšmių. InValues bus naudojamos žemiau */// ################################# ## // ########-Grąžinkite skaičių masyvą-############################# #######################/ * deklaruoja masyvą, kuris bus išsiųstas į „Matlab“(* daro jį masyvu) */double * OutValues; * Sukurkite/paskirstykite grąžinimo argumentą, 1x2 (1 eilutės 2 stulpelio) grįžtamojo masyvo pirmojo lizdo matricą (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Gaukite žymeklį grįžimo argumentui */OutValues = mxGetPr (plhs [0]); / * priskirkite reikšmes „OutValues“, kurios bus pirmoje grąžinimo masyvo vietoje, čia mes naudojame „InValues“, kad kompiuterizuotume „OutValues“*/OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ########################################## ###########-Grąžinkite eilutę-############################## ###########################/* deklaruokite eilutės kintamąjį, kuris turi būti išsiųstas į matlab*/char* str;/*, string */str = "byebye";/ *įdėkite eilutę į grąžinimo masyvų antrąjį lizdą (plhs [1]) */plhs [1] = mxCreateString (str); // ########## ######################################## daugiau dalykų-########################################### #############/ * norėdami grąžinti daugiau daiktų, vadovaukitės aukščiau pateiktomis bendromis taisyklėmis, bet įdėkite medžiagą į kitus plhs lizdus, plhs [somenumber] */}

3 žingsnis: jei dėl kokių nors priežasčių jis nesudaromas

Jei dėl kokių nors priežasčių jis nesudaromas
Jei dėl kokių nors priežasčių jis nesudaromas

Jei dėl kokių nors priežasčių jis nerenka (turėtų, gerai veikia mano kompiuteryje), pamatysite šiuos išteklius, iš jų aš sužinojau. Jie turi nedidelių nesklandumų (kai kurios senos, neveikiančios gramatikos naudojimas ir kt.), Bet jei judate pirmyn ir atgal tarp dviejų, turėtumėte sugebėti sujungti tai, kas veikia. Http://web.ccr.jussieu.fr/ccr/ Dokumentacija/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Rekomenduojamas: