مقدمه ای بر تابع نویسی در متلب

با توجه به مطالبی که در پست پیشین در زمینه تابع نویسی بیان شد، مقدمه ای بر نحوه باز کردن محیط کدنویسی، تفاوت میان تابع و اسکریپت و برخی امکانات از قبیل توابع از پیش تعریف شده در متلب مورد اشاره قرار گرفت. همچنین در این نوشته برخی از الزامات اساسی در تابع نویسی بیان شد. در این نوشته قصد آن داریم تا بطور اختصاصی تر نسبت به تابع نویسی در متلب نکاتی را بیان کنیم.

به طور کلی تابع به بخشی از یک برنامه کلی اشاره دارد که هدف آن انجام بخشی از محاسبات مقطعی برای تولید خروجی های مشخص از ورودی های مشخص می باشد. اساس تابع نویسی در نرم افزار C در متلب مورد استفاده قرار می گیرد. با این تفاوت که در اینجا کار راحت تر شده است. در محیط C و میکروهای مورد استفاده با این زبان نیاز به رعایت تمامی نکات از تعریف متغیرها گرفته تا در نظر گرفتن طول آن ها مورد نیاز است. حال آنکه در نرم افزار متلب شما نیاز به بررسی دقیق در این اندازه ندارید.

تابع نویسی در متلب mfile min 300x202 تابع نویسی در متلب   mfile
تابع نویسی در متلب

اهمیت تابع نویسی در متلب

مهندسی برق بویژه در زمینه های مرتبط با گرایش کنترل نیاز مبرم به آشنایی با کدنویسی در متلب دارد. اگرچه در گرایش قدرت نیز به منظور انجام عملیات مرتبط با دینامیک سیستم ها ، مدل سازی (شبیه سازی) سیستم هایی نظیر توربین های بادی ، سلول خورشیدی و همچنین بیان الگوریتم های هوشمند نظیر ژنتیک ، PSO و … نیاز به کدنویسی اساسیست. مسئله کدنویسی در محیط متلب در محیط سیمولینک نیز کاربرد اساسی دارد. به این صورت که این مسئله می تواند شما را از بلوک بندی های فراوان و بی مورد بی نیاز کرده و باعث خواهد شد تا :

  • احتمال اشتباهات رایج در بلوک بندی کاهش یابد.
  • شبیه سازی نهایی بهینه شده و سرعت کار افزایش یابد.
  • خوانایی برنامه شما برای دیگر کاربران و خودتان (در سایر مراحل) ساده تر گردد.
  • و نهایتا عیب یابی برنامه بسیار راحت تر انجام گیرد.

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

محیط بلوک های متداول ریاضی min 300x233 تابع نویسی در متلب   mfile

بخش مرتبط با کتابخانه سیمولینک – بلوک های متداول – عملیات ریاضی

نکات مهم در کدنویسی در سیمولینک

همانگونه که اشاره شد، کدنویسی در محیط سیمولینک و در رابط هایی که (نظیر Matlab Function ، Interpreted matlab function) به این منظور قرار داده شده اند، دست طراح را باز می گذارند و می تواند حجم کار در سیمولینک را کاهش داد. اما به یاد داشتن برخی نکات در این مورد ضروری است :

  • تمامی امکاناتی که در تابع نویسی (mfile نویسی) در اختیارتان قرار دارد در سیمولینک در دسترس نخواهد بود ! به این معنا که تمامی توابع متلب قابل استفاده در کدنویسی های انجام گرفته در سیمولینک نیستند. البته استفاده از بلوک  Interpreted matlab function تا حدود زیادی دایره توابع قابل استفاده را افزایش می دهد.
  • امکان وقوع خطاهایی نظیر لوپ جبری در این حالت افزایش می یابد. البته این مسئله رفته رفته و با حرفه ای شدن کاربر کمتر پیش می آید.
  • برخی بلوک های اختصاصی در سیمولینک را نادیده نگیرید. مشخصا استفاده از کدنویسی کار را ساده تر می کند ولی برخی بلوک ها در کتابخانه سیمولینک قرار داده شده اند که می توانند شما را از کدنویسی برای عملیات بی نیاز سازد. از این جمله می توان به بلوک هایی نظیر mean به منظور محاسبه میانگین در تِرک های مشخص و یا RMS در مهندسی برق که به منظور محاسبه مقادیر rms جریان و ولتاژ  می باشند، اشاره کرد.
  • امکان بروز عدم سنکرون سازی مناسب بین کد نوشته شده و سیمولینک ! این مشکل در سیمولینک های حجیم که همراه با کدنویسی می باشند “گاها” مشاهده می شود. در این حالت ممکن است خطای لوپ جبری از متلب صادر شود، حال آنکه چنین چیزی ذاتا اتفاق نیاُفتاده باشد و آنچه باعث بروز این مسئله شده عدم سنکرون سازی مناسب باشد. در این شرایط ناگزیر هستید تا تکنیک های مختلف کدنویسی را امتحان کنید و یا با رسم بلوک دیاگرامی عملیات مورد نظر کدها را حذف کنید.

کدنویسی در متلب ( تابع نویسی در متلب )

کدنویسی در متلب شاید سخت ترین عملیات قابل انجام در این نرم افزار باشد. به طور مشخص سابقه کدنویسی در نرم افزارهای مشابه علی الخصوص C می تواند از دردسرهای شما در این امر بکاهد. ولی این همه مسئله نیست. متلب نرم افزاری است که به جهت ارائه توابع مفید در قالب جعبه ابزار (ToolBoxes)  شناخته شده است. این مسئله از این جهت اهمیت دارد که شما نیاز به حرفه ای بودن برای کار در محیط کدنویسی در متلب ندارید.

اولین گام به منظور کدنویسی در متلب شناخت کامل کاری است که قصد انجام آن را دارید. اینکه کار شما در چه راستایی می باشد ؟

  • آیا هدف صرفا انجام یک سری عملیات ساده ریاضی می باشد !
  • آیا کار در بخش های خاصی نظیر کنترل مقاوم ، بهینه سازی ، کار با مقادیر ویژه و یا سیستم های خطی می باشد !
  • آیا کار در راستای درک ویژگی های عددی یک مجموعه نظیر سری فوریه ، عملیات مرتبط با سیستم های چند متغیره ، میانگین گیری ، عملیات آماری می باشد !
  • آیا کار در راستای استفاده از الگوریتم هایی نظیر فازی ، عصبی و … می باشد !

اولین گام برای کدنویسی در متلب شناخت شاخه اصلی از فرآیند مورد نظر می باشد!

دلیل این مسئله همان است که قبلا گفته شد ، ارائه جعبه ابزارهای مفید در جهت انجام برنامه های مرتبط با علوم مختلف که در بخش مرتبط با متلب قرار داده شده اند. در جستجوی جعبه ابزارها با دو نوع از آن ها مواجهیم ، برخی از این جعبه ابزارها توسط خود MathWorks ارائه می شوند که در نسخه متلب نصب شده موجود می باشند. برای این جعبه ابزارها دموهای مناسب و یا حداقل مثال های خوبی قرار داده شده است که می تواند در آموزش متلب مفید باشد. این جعبه ابزارها نسبت به نوع دوم قابل اعتمادترند! نوع دوم جعبه ابزارهایی می باشند که توسط کاربرها ارائه می شوند و استاندارد بودن آن ها توسط MathWorks مشخص نشده است. هر چند این جعبه ابزارها نیز می تواند در مواردی بکار گرفته شوند. برای یافتن این جعبه ابزارها استفاده از اینترنت تنها چاره کار می باشد. گاها این جعبه ابزارها گُنگ می باشند و یا طریقه مناسب ورودی های توابع ارائه نمی گردند که عملا امکان استفاده از آن ها را ناممکن می سازد. در نوشته های بعد برخی از این جعبه ابزارها که کاربردی می باشند، معرفی خواهند شد.

جعبه ابزارها در متلب

از جمله شاخص ترین جعبه ابزارهای ارائه شده توسط خود متلب که در مهندسی برق کاربرد دارند، می توان به :

  1. جعبه ابزار بهینه سازی جهانی
  2. جعبه ابزار شبکه های عصبی
  3. جعبه ابزار فازی
  4. جعبه ابزار طراحی فیلتر
  5. جعبه ابزار پردازش تصویر
  6. جعبه ابزار طراحی سیستم های LTI

و سایر جعبه ابزارها اشاره کرد.

اما این همه مسئله نیست ، جعبه ابزارها علاوه بر مفید بودن ، ایراداتی هم دارند. این جعبه ابزارها بصورت حرفه ای ارائه نشده اند و تنها در کارهای ابتدائی می توانند مورد استفاده قرار گیرند. اکثر آن ها بهینه نیستند ! به عنوان مثال شبکه عصبی ارائه شده با جعبه ابزار بهینه ترین حالت ممکن را به شما نخواهد داد. جعبه ابزار بهینه سازی تنها برای مسائل بهینه که شرایط مورد نظر مسئله را دارند کاربرد دارد و در مسائل بهنیه سازی در حضور محدودیت های متنوع عملا کاربرد خود را از دست می دهد.

توابع از پیش تعریف شده

مزیت مهمتر از جعبه ابزارها ، توابع تعریف شده در متلب برای انجام فرآیند های معرفی شده در علوم مهندسی نظیر مهندسی برق می باشد. این توابع می توانند از هر دسته ای مورد نظر باشند :

  1. کنترل بهینه : انواع توابع نظیر LQR و یا حل بهینه سازی با توابعی نظیر Fmincon که می توانند بکار بروند.
  2. کنترل مقاوم : توابعی نظیر hinfsyn که می توانند برای حل مسائل مورد نظر در کنترل مقاوم بکار بروند.
  3. کنترل PID : وجود ابزارهایی به منظور طراحی PID با در نظر گرفتن شرایط زمانی مطلوب کاربر (این مورد تنها در سیستم های خطی کاربرد دارد).
  4. کنترل پیش بین : ارائه توابعی نظیر MPC به منظور طراحی کنترل پیش بین برای سیستم های دینامیکی .

و بسیاری توابع دیگر که کار را ساده تر می کنند.

کدهای مربوط به این توابع در دایرکتوری متلب قرار دارند و در هنگام خطا در بکارگیری آن ها این توابع نمایش داده می شوند. آنچه کاربرد این توابع را ساده تر می کند وجود Help قدرتمند متلب در ارائه مثال های متنوع و کاربردی برای این عملیات می باشد.

به طور مشخص Help نرم افزار متلب بهترین راهنما در مسیر یادگیری کار می باشد.

برخلاف جستجوهای اینترنتی ، در متلب و به منظور بهره گیری از Help نیاز به شناخت دقیق نام تابع می باشد. بنابراین در اولین گام بایستی با توجه به عملیات مورد نظر نام تابع را بدست آورده و سپس در Help متلب نسبت به بررسی دقیق تر اقدام کنید.

نمایی از Help متلب min 300x159 تابع نویسی در متلب   mfile

نمایی از محیط Help نرم افزار متلب

شروع تابع نویسی در متلب

پس از شناخت توابع مورد نیاز در متلب یک گام بزرگ به منظور تابع نویسی در متلب انجام شده است. آنچه در ادامه کار باقی می ماند ، اغلب سر راست و مشخص می باشد. البته در مواقعی نیاز به حلقه نویسی و ادغام عبارات شرطی در تابع نویسی در متلب می باشد که این موارد (که به ندرت در مهندسی برق پیش می آید) بعدا ارائه خواهد شد. ادامه کار شامل ارائه یک ترتیب مناسب برای کدنویسی می باشد که بستگی مستقیم با کار مورد نظر دارد.

در یک فرآیند کدنویسی برای بدست آوردن یک کنترل کننده مقاوم نیاز به تعریف متغیرها ، مدل مسئله ، ارائه مدل جنرال ، ارائه کد مرتبط با تابع مقاوم و نهایتا بدست آوردن سیستم حلقه بسته می باشد. این مراحل بایستی به همین ترتیب در کار مشخص شوند. برای سایر برنامه ها نیز کار به همین شکل می باشد که در نوشته های بعد به صورت تخصصی تر به آن ها خواهیم پرداخت.

منبع : برق تِک

About برق تِک

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *