راهنمای جامع نوشتن و کار با فایل MEX در متلب (MATLAB) با زبان ++C
راهنمای جامع نوشتن و کار با فایل MEX در متلب (MATLAB) با زبان ++C
فایل MEX در متلب چیست و چرا باید از آن استفاده کنیم؟
یکی از سؤالات پرتکرار کاربران متلب این است که چرا باید از فایلهای MEX در MATLAB استفاده کنیم؟
پاسخ کوتاه این است: افزایش چشمگیر سرعت اجرای برنامهها.
متلب یک زبان تفسیرشده (Interpreted Language) است؛ به این معنا که هر دستور در زمان اجرا تفسیر میشود و این موضوع در حلقهها، شرطها و محاسبات سنگین باعث افت شدید سرعت میگردد. در مقابل، زبانهایی مانند C و C++ کد را بهصورت کامپایلشده اجرا میکنند و سربار تفسیری ندارند.
فایلهای MEX (MATLAB Executable) پلی بین MATLAB و زبانهای سطح پایین مانند C/C++ هستند که امکان اجرای کد کامپایلشده را مستقیماً داخل محیط متلب فراهم میکنند.
مفاهیم پایه (Nomenclature)
قبل از ورود به بحث، آشنایی با اصطلاحات زیر ضروری است:
- Compiler (کامپایلر): برنامهای که کد C/C++ را به فایل اجرایی تبدیل میکند
- MATLAB™: محیط محاسبات عددی و شبیهسازی
- Command Window (کنسول متلب): محل اجرای دستورات
- فایل سورس C/C++: مانند
hello.cpp - فایل MEX: خروجی کامپایل که مانند یک تابع متلب فراخوانی میشود
پیشنیازهای ساخت فایل MEX در MATLAB
1. نصب کامپایلر C/C++
برای ساخت فایل MEX، وجود یک کامپایلر سازگار الزامی است. در نسخههای جدید MATLAB، بهترین انتخاب:
- Microsoft Visual Studio (Community یا Professional)
- به همراه Windows SDK
نکته: دیگر نیازی به نسخههای قدیمی مانند Visual Studio 2012 نیست. MATLAB بهصورت خودکار نسخههای سازگار را تشخیص میدهد.
2. معرفی کامپایلر به MATLAB
در Command Window دستور زیر را اجرا کنید:
mex -setup
پس از اجرای دستور، MATLAB کامپایلرهای نصبشده را شناسایی میکند. کافی است گزینه پیشنهادی را با زدن y تأیید کنید.
در نهایت باید پیامی مشابه زیر مشاهده کنید:
MEX configured to use 'Microsoft Visual C++'
اولین مثال: ساخت یک فایل MEX ساده (Hello World)
ایجاد فایل hello.cpp
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
mexPrintf("Hello, world!\n");
}
تابع
mexFunctionنقطه ورود تمام فایلهای MEX است و دقیقاً مانندmainدر C عمل میکند.
کامپایل فایل MEX در متلب
در مسیر فایل، دستور زیر را اجرا کنید:
mex hello.cpp
پس از کامپایل موفق، فایلی با پسوند MEX (بسته به سیستمعامل) ایجاد میشود.
اجرای فایل MEX مانند یک تابع متلب
hello
خروجی:
Hello, world!
مثالها و نمونهکدهای آماده MEX در MATLAB
متلب مثالهای رسمی و بسیار کاربردی برای فایلهای MEX ارائه داده است. این مثالها در مسیر زیر قرار دارند:
matlabroot/extern/examples/mex
برای مشاهده و ویرایش یکی از مثالها:
edit([matlabroot '/extern/examples/mex/explore.c'])
چرا و چه زمانی باید از فایل MEX استفاده کنیم؟
سرعت پایین اجرای کد در MATLAB معمولاً در سه بخش دیده میشود:
- حلقههای تو در تو (for / while)
- دستورات شرطی پیچیده
- پردازش دادههای حجیم
سه راهکار اصلی برای افزایش سرعت در متلب
- Preallocation (پیشتعریف آرایهها)
- Vectorization (بردارسازی)
- استفاده از فایلهای MEX
در بسیاری از مسائل، بردارسازی یا پیشتعریف کافی نیست یا حتی مصرف حافظه را افزایش میدهد. در این شرایط، فایل MEX بهترین و سریعترین راهحل است.
مزایای فایلهای MEX در MATLAB
- سرعت بسیار بالا (نزدیک به C/C++)
- فراخوانی مستقیم مانند توابع داخلی متلب
- امکان دریافت ورودی و تولید خروجی
- مناسب برای شبیهسازیهای سنگین و مقالات علمی
روشهای ایجاد فایل MEX
روش اول: نوشتن دستی کد C/C++
در این روش، بخش زمانبر برنامه مستقیماً با C یا C++ نوشته میشود.
این روش بیشترین کنترل و بیشترین سرعت را میدهد اما:
- نیازمند آشنایی با سینتکس C/C++
- خطایابی (Debug) دشوارتر است
روش دوم: تبدیل خودکار کد MATLAB به MEX
سادهترین روش برای کاربران متلب استفاده از ابزارهای تبدیل خودکار است. در این روش، بدون درگیری مستقیم با C++ میتوان فایل MEX تولید کرد.
ویدیوی آموزشی زیر این فرآیند را بهصورت عملی نشان میدهد:
(نیازمند ابزار تغییر IP)
https://www.youtube.com/watch?v=IZJ-IlI3QR0
تجربه عملی از افزایش سرعت با MEX File
در تجربههای واقعی:
- کاهش زمان اجرا از ۷ دقیقه به ۴ ثانیه
- کاهش زمان اجرا از ۴۵ دقیقه به ۹ ثانیه
- حل مسئلهای که بعد از ۵ ساعت نتیجه نمیداد، در ۴۵ دقیقه
این اعداد بهخوبی نشان میدهند که MEX File یکی از قدرتمندترین ابزارهای بهینهسازی در MATLAB است.
جمعبندی
اگر در پروژههای متلب با مشکلات زیر مواجه هستید:
- سرعت بسیار پایین اجرا
- حلقههای پیچیده و زمانبر
- شبیهسازیهای سنگین پژوهشی
استفاده از فایلهای MEX با C/C++ یک راهکار حرفهای، استاندارد و اثباتشده است.
شاید علاقه مند باشید مطالب زیر را هم ببینید:
- شناسایی توابع انتقال ماشین DCبا استفاده از پاسخ پله به کمک الگوریتم ژنتیک
- سفارش شبیه سازی مقالات درس کنترل مدرن با متلب
- بدست آوردن تقریب سری تیلور مرتبه دوم با متلب
- دستور demo در متلب
- مدل فرایند گاورنر 4درجه آزادی جهت کنترل سرعت توربین
- شناسایی سیستم غیر خطی ربات بازوی مسطح دو درجه آزادی توسط شبکه عصبی
- ماشین های القایی متقارن در متلب قسمت دوم
- سفارش شبیه سازی مقالات درس شناسایی سیستم با متلب
- بررسی شرط پیوستگی جریان در یکسوساز نیم موج کنترل شده با متلب



سلام این موردی که توضیح دادین فوقالعاده هست. فقط یه مشکلی وجودداره اون فایل یوتیوب که قرار دادین بنظر private هست. اگر امکانش باشه ویدیوش رو هم تو سایتتون قرار بدین عالی میشه. متشکراز توضیح روشنتون.