حل مسائل بهینه‌سازی با نرم‌افزار در متلب matlab

اگر با مسائل مهندسی سروکار دارید و اندکی هم شوق و ذوق حل مسائل کاربردی را داشته باشید، احتمالا با مسائلی که نیاز به بهینه‌سازی آن‌ها دارید، روبرو خواهید شد. در این مطلب می‌خواهم به حل یک مثال، چگونگی حل یک مسئله بهینه‌سازی با استفاده از دستورات مت‌لب، آموزش دهم.

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

nn1

در این مثال فرض من این است که شما آشنایی مقدماتی با نرم‌افزار مت‌لب را دارید و یک تابع چند جمله‌ای درجه ۵ دارید که می خواهید حداکثر و حداقل مقدار آن را در بازه خاصی بیابید. در پایان روش بهینه‌سازی توابع چند متغیره را توضیح خواهم داد .

nn2

  • خطوط ۵ تا ۷: انتخاب ۶ داده و عبور یک منحنی درجه ۵ از آن
  • خط ۱۰: نشان دادن داده‌ها بر روی نمودار با نقاط قرمز
  • خطوط ۱۲ تا ۱۴: نشان دادن منحنی عبور داده شده در نمودار
  • خط ۱۵: مشخص کردن محدوده محور Y
  • خط ۱۶: راهنمای نمودار (بالا سمت راست)
  • خط ۱۸: انتخاب تیتر برای نمودار با فونت ۱۲
  • خطوط ۱۹ تا ۲۴: بهینه‌سازی برای یافتن مقدار ماکسیمم تابع و نشان دادن مقدار آن در نرم‌افزار مت‌لب و مشخص کردن آن با نقطه سیاه در نمودار
  • خطوط ۲۶ تا ۳۰: بهینه‌سازی برای یافتن مقدار مینیمم تابع و نشان دادن مقدار آن در نرم‌افزار مت‌لب و مشخص کردن آن با نقطه سیاه در نمودار

در حل این مسئله باید توجه داشته باشید که دستور اصلی بهینه‌سازی fminbnd است و از همین دستور هم برای یافتن ماکزیمم و هم برای یافتم مینیمم تابع می‌توان استفاده کرد. در حالت عادی وقتی از این دستور در مت‌لب استفاده می‌کنیم، خروجی مقدار مینیمم خواهد بود و برای یافتن مقدار ماکزیمم تابع، باید تابع را قرینه کنیم (در منفی ضرب کنیم).

دستور fminbnd برای بهینه کردن توابع تک متغیره به‌کار می‌رود و برای بهینه سازی توابع چند متغیره باید از دستور fminsearch استفاده کنید. الگوریتمی که این دستور‌ها به هنگام بهینه‌سازی از آن استفاده می‌کنند، derivative-free method می‌باشد که برای اطلاعات بیشتر می‌توانید به کتاب Optimization of Chemical Processes by Edgar Himmelblau and Lasdon مراجعه کنید.

 

 

خروجی

p =

-0.0833
1.2083
-6.3333
13.7917
-9.5833
2.0000

xmax =

2.4552

fxmax =

4.3467

xmin =

0.4970

fxmin =

-0.0626


فیلم آموزش فارسی بهینه سازی در متلب

بر روی عکس زیر کلیک کنید

optimization in MATLAB training video university student

14 دیدگاه دربارهٔ «حل مسائل بهینه‌سازی با نرم‌افزار در متلب matlab»

  1. جواب eeiranmatlab درسته
    منتها سوال fereshte یک خورده کلی به نظر می رسه:
    ایا می خواهید فقط نقطه را نمایش بدهید و تمام…
    یا این که می خواهید هر موقع که اراده کردید محل نمایش رو تغییر دهید…

    ایا منحنی هم دارید و می خواهید در حضور منحنی این کار را انجام دهید:
    اگر فقط یک نقطه را می خواهید همراه نمودار نشان دهید جواب همان چیزی است که eeiranmatlab نوشته اند
    مگر اینکه بخواهید ان نقطه را هر موقع که دوست داشتید محلش را تغییر دهید.
    اگر به جوابی که می خواستید نرسیده اید می توانید بپرسید تا جواب دهم…

  2. سلام. خیلی ممنون از مطلب خوبتون. من با دستور fminsearch به مشکل خوردم و مقادیر خیلی زیاد و غیرمنطقی میده. میخوام با optimset محدودیت ایجاد کنم و ازش بخوام متغیرها را تو بازه مشخص بهینه کنه. امکانش هست؟ اگر هست چطور باید دستورشو رو بنویسم؟

    1. تابع fminbnd یک تابع بدون قید و محدودیت می باشد و شما نمی تونی براش بازه مشخص کنی که تو فلان بازه برات جستجو کنه.
      به جاش باید با تابع fminbnd استفاده کنی که میشه براش یک بازه در ورودی داد و داخل این بازه مینیمم را پیدا میکنه.

  3. سلام من یک مدل دارم در اپنسیس که از طریق لینک با متلب میخوام یسری پارامترها بهینه بشن دو تا پارامتر به همراه پاسخ بهینه رو بلدم و از طریق surf به جواب میرسم
    سوال اولم اینه نقطه بهینه نمودار surf رو با چه دستوری بزنم روی نمودارش نمایش بده
    سوال دومم اینه برای اینکه سه پارامتر به همراه پاسخ بهینه شوند چکار باید کرد

  4. سلام تابع ما مثلا
    4cos(2pi6t)+3sin(2pi9t)
    است.میخوام ماکزیمم و مینیمم محلی کدش رو بنویسم و رو شکل نشون بده.کدش رو چطوری بنویسم؟

  5. ببخشید برای پیدا کردن ماکزیمم تابعی که داخلش یک مجهول هست و برای خود تابع یک شرطی هست ،‌از چه دستوری استفاده کنم؟؟؟؟؟

  6. ببخشید برای پیدا کردن ماکزیمم تابعی که خود تابع ، یک مجهول دارد و همچنین یک شرطی روی تابع وجود دارد چه دستوری استفاده کنم؟ تابع من
    max{ log (s(k).u) , v}=A(k)
    که v را ندارم و گفته v جوری انتخاب میشود که سیگما A(k) ها برابر یک باشد

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.