Բովանդակություն:

Matlab MEX ֆայլ պատրաստելը ՝ 3 քայլ
Matlab MEX ֆայլ պատրաստելը ՝ 3 քայլ

Video: Matlab MEX ֆայլ պատրաստելը ՝ 3 քայլ

Video: Matlab MEX ֆայլ պատրաստելը ՝ 3 քայլ
Video: «Աղուէս» դաս 3 - Միջերեսի նկարագրություն։ Lesson 3- Interface description 2024, Նոյեմբեր
Anonim
Matlab MEX ֆայլ պատրաստելը
Matlab MEX ֆայլ պատրաստելը

Հրահանգներ, թե ինչպես ինտեգրվել կազմված C կոդը Matlab- ի հետ: MEX- ը նշանակում է MATLAB կատարելի: MEX- ֆայլերը դինամիկորեն կապված ենթածրագրեր են, որոնք արտադրվում են C- ից կամ Fortran- ի աղբյուրից, որոնք կազմվելիս կարող են գործարկվել MATLAB- ի ներսից այնպես, ինչպես MATLAB M- ֆայլերը կամ ներկառուցված գործառույթները: Արտաքին ինտերֆեյսի գործառույթները ապահովում են MEX- ֆայլերի և MATLAB- ի միջև տվյալների փոխանցման գործառույթ, ինչպես նաև C կամ Fortran կոդից MATLAB գործառույթներ կանչելու հնարավորություն: Այստեղ ես ձեզ ցույց կտամ այն ամենը, ինչ ձեզ հարկավոր է ՝ արագ օգտակար mex ֆայլ պատրաստելու համար: կարիք. = տեքստային խմբագիր = matlab 6.1 կամ ավելի բարձր (ավելի վաղ տարբերակները կարող են կատարել նաև mex ֆայլեր, բայց մի փոքր այլ ձևաչափ) = matlab- ն ունի իր սեփական c կոմպիլյատորը, որը գալիս է դրա հետ, բայց ես օգտագործել եմ տեսողական c ++ կոմպիլյատոր, քանի որ այն ունեի:

Քայլ 1: Կոդ

Օրենսգիրքը
Օրենսգիրքը

ներբեռնեք իմ կցած ֆայլը ՝ mextest1p0.cpp

cpp- ը նշանակում է c ++ ……… Ահա այն, ինչ անում է ծածկագիրը. Matlab- ում տպում է «բարև աշխարհ», matlab- ին վերադարձնում է երկու արգումենտ, երկու տարրի համարի զանգված և տող, վերադարձված թվերի զանգվածի առաջին տարրը 1 է + համարը, որին դուք ուղարկել եք, վերադարձված թվերի զանգվածի երկրորդ տարրը 2 + է: Ձեր ուղարկած համարը ………. Այսպես այն իրականացնել..cpp ֆայլ: Ես չեմ կարող գրել այս հրահանգները այստեղ, քանի որ հրահանգները ինքնաբերաբար խմբագրում են հրամանները և դրանք սխալ են դարձնում: Ստորև բերված նկարում կարող եք տեսնել, թե ինչպես է աշխատում կոդը: Մի անհանգստացեք «հրամանի տողի նախազգուշացման» մասին, այն կարծես ոչինչ չի ազդում: Iceանուցում ձախ կողմում, ընթացիկ գրացուցակը պարունակում է.cpp ֆայլը: Աջ կողմում կարող եք տեսնել, թե ինչպես եմ կազմում կոդը և այնուհետև կատարում այն matlab- ից: Կարդացեք ձեր տեքստային խմբագրիչի ֆայլը (օրինակ ՝ Windows- ի տետրը), այն շատ լավ փաստաթղթավորված է և ինքնաբերաբար բացատրող, դուք կկարողանաք անել գրեթե այն ամենը, ինչ ձեզ հարկավոր է ՝ հետևելով ծածկագրի պայմաններին (այսինքն ՝ պատճենել և տեղադրել այն և կատարել աննշան փոփոխություններ) ############################################### #… հաջորդ էջը ՉԻ ԱՇԽԱՏԵԼ, ՊԵՏՔ Է ԲԵՌՆԵԼ ՖԱՅԼԸ, որը կցել եմ ՝ սա պատճենելու և տեղադրելու փոխարեն: ##################################################### #######################

Քայլ 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- ին (* -ը դարձնում է զանգված) */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 slots, plhs [somenumber] */}

Քայլ 3. Եթե որևէ պատճառով այն չի կազմվում

Եթե որևէ պատճառով այն չի կազմվում
Եթե որևէ պատճառով այն չի կազմվում

Եթե ինչ -ինչ պատճառներով այն չի հավաքում (այն պետք է, լավ աշխատում է իմ համակարգչի վրա), տեսեք այս ռեսուրսները, դրանք այնտեղ են, որտեղից ես սովորել եմ: Նրանք ունեն փոքր թերություններ (օգտագործել հին, ոչ ֆունկցիոնալ քերականություն և այլն), բայց եթե երկուսի միջև այս ու այն կողմ եք գնում, ապա պետք է կարողանաք միասին ինչ -որ բան աշխատել: https://web.ccr.jussieu.fr/ccr/ Փաստաթղթեր/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Խորհուրդ ենք տալիս: