جدول المحتويات:

عمل ملف Matlab MEX: 3 خطوات
عمل ملف Matlab MEX: 3 خطوات

فيديو: عمل ملف Matlab MEX: 3 خطوات

فيديو: عمل ملف Matlab MEX: 3 خطوات
فيديو: MATLAB - 05 - M-files (Script files) - Part 1 2024, يوليو
Anonim
عمل ملف Matlab MEX
عمل ملف Matlab MEX

تعليمات حول كيفية دمج كود C المترجم مع Matlab. MEX تعني MATLAB Executable. ملفات MEX هي إجراءات فرعية مرتبطة ديناميكيًا يتم إنتاجها من شفرة مصدر C أو Fortran والتي ، عند تجميعها ، يمكن تشغيلها من داخل MATLAB بنفس طريقة ملفات MATLAB M أو الوظائف المضمنة. توفر وظائف الواجهة الخارجية وظائف لنقل البيانات بين ملفات MEX و MATLAB ، والقدرة على استدعاء وظائف MATLAB من كود C أو Fortran. هنا سأعرض لك كل ما تحتاجه لإنشاء ملف mex مفيد بسرعة. need: = محرر نصوص = matlab 6.1 أو أعلى (يمكن للإصدارات السابقة عمل ملفات mex أيضًا ولكن بصيغة مختلفة قليلاً) = matlab بها مترجم c خاص بها يأتي معها ، لكنني استخدمت مترجم c ++ المرئي لأنني حصلت عليه.

الخطوة 1: الكود

الرمز
الرمز

قم بتنزيل الملف الذي أرفقته: mextest1p0.cpp

cpp تعني c ++ ……… وهذا ما يفعله الكود: ……… يأخذ رقمًا ترسله من موجه أوامر matlab. تقوم بطباعة "hello world" في matlab وتقوم بإرجاع وسيطين إلى matlab ، مصفوفة رقم مكون من عنصرين وسلسلة ، العنصر الأول من مصفوفة الأرقام التي تم إرجاعها هو 1 + الرقم الذي أرسلته هو العنصر الثاني من مصفوفة الأرقام التي تم إرجاعها هو 2 + الرقم الذي أرسلته ………. إليك كيفية تنفيذه: ……….. احفظ الملف على جهاز الكمبيوتر الخاص بك ، ابدأ matlab ، انتقل في matlab إلى الدليل حيث يتم اتباع الملف ثم اتبع تعليمات التجميع والتنفيذ في الجزء العلوي من ملف.cpp. لا يمكنني كتابة هذه التعليمات هنا لأن التعليمات تعدل الأوامر تلقائيًا وتجعلها تظهر بشكل غير صحيح. في الصورة أدناه يمكنك رؤية الكود يعمل. لا تقلق بشأن "تحذير سطر الأوامر" ، لا يبدو أنه يؤثر على أي شيء. لاحظ على الجانب الأيسر ، يحتوي الدليل الحالي على ملف.cpp. على اليمين يمكنك رؤيتي وأنا أقوم بتجميع الكود ثم تنفيذه من matlab. اقرأ الملف في محرر النصوص الخاص بك (على سبيل المثال ، المفكرة في windows) ، فهو موثق جيدًا وموضح ذاتيًا ، وستكون قادرًا على فعل أي شيء تحتاجه تقريبًا باتباع الاصطلاحات الموجودة في الكود (مثل نسخه ولصقه وعمله) تعديلات طفيفة) ############################################### # # # # # الصفحة التالية لن تعمل ، يجب عليك تنزيل الملف الذي أرفقته بدلاً من نسخه ولصقه. ################################################## #######################

الخطوة الثانية: هذه هي الكود ، لا تنسخ وتلصق

هذه هي المدونة ، لا تقم بنسخها ولصقها
هذه هي المدونة ، لا تقم بنسخها ولصقها

################################################## # # # # # العمل ، يجب عليك تنزيل الملف الذي أرفقته بدلاً من نسخه ولصقه. ####################################### // تمت كتابة هذا في c ++ بواسطة leevonk // إنه رمز لملف matlab mex // سيأخذ الكود قيمة رقم واحدة ويخرج قيمتين رقميتين // يتم حساب رقمي الإخراج من رقم الإدخال // سيخرج الرمز أيضًا قيمة سلسلة // الكود سوف اطبع أيضًا "hello world" #include "mex.h" void mexFunction (int nlhs، mxArray * plhs ، int nrhs، mxArray * prhs ) {// ############# ############################## // ####### - طباعة "hello world" - ### ########## // ####################################### ### mexPrintf ("Hello world")؛ // ###################################### ##### // ######## - احصل على أشياء من ماتلاب - ######### // ################ ########################### / * أعلن عن متغير مصفوفة للاحتفاظ بالقيم الواردة * / 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 [somenumber] * /}

الخطوة 3: إذا لم يتم التحويل لأي سبب من الأسباب

إذا لم يتم تجميعها لأي سبب من الأسباب
إذا لم يتم تجميعها لأي سبب من الأسباب

إذا لم يتم تجميعها لأي سبب من الأسباب (يجب أن تعمل بشكل جيد على جهاز الكمبيوتر الخاص بي) ، فراجع هذه الموارد ، فهي حيث تعلمت منها. لديهم القليل من الثغرات (استخدام بعض القواعد القديمة غير الوظيفية ، وما إلى ذلك) ولكن إذا ذهبت ذهابًا وإيابًا بين الاثنين ، فيجب أن تكون قادرًا على تجميع شيء يعمل معًا. https://web.ccr.jussieu.fr/ccr/ الوثائق / Calcul / matlab5v11 / docs / 00009 / 009a1.htmhttps://cnx.org/content/m12348/latest/

موصى به: