آموزش حل ناتساوی های ماتریسی خطی (LMI) با متلب

آموزش حل ناتساوی های ماتریسی خطی (LMI) با متلب

احتمالا برای شما هم پیش اومده که در یک مقاله یا کتاب به جایی رسیدید که باید یک ناتساوی ماتریسی خطی (یا LMI) رو حل کنید و در بدر دنبال یک نفر هستید تا در کوتاهترین زمان ممکن حل این نوع ناتساوی ها رو به شما یاد بده تا مجبور نباشید زمان قابل توجهی صرف کنید و از منابع مختلف دنبال راه حل باشید. اگر شما هم جزو این دسته از محققین هستید دیگه نگران نباشید. در این پست قراره تمام جزییات و کلیات نامساوی ماتریسی خطی (و حتی غیرخطی) با نحوه حل اونها در متلب و با دو روش تولباکس متلب و YALMIP به روش ساده و با مثالهای مفصل توضیح داده بشه. اگر با این فیلمهای آموزشی همراه شده و مرحله به مرحله مثالها رو پیش برید بعد از این ۱۱ جلسه قادر خواهید بود حل کننده (solver) مناسب رو برای مساله خودتون انتخاب کرده و ناتساویهای ماتریسی خودتون رو باهاش حل بکنید. بعد از تشریح کامل دو روش بالا یک مثال از طراحی کنترل کننده برای سیستم شناور مغناطیسی از یک مقاله IEEE با استفاده از LMI خدمت شما ارایه میشه (به همراه شبیه سازی در محیط سیمولینک) تا مطلب کامل جا بیافته. با ما همراه باشید…

پیشنیازها: آشنایی اولیه با جبر خطی و تئوری سیستمهای کنترل خطی – آشنایی با کدنویسی در محیط متلب


جلسه اول:

مقدمات ریاضی و تعریف ناتساوی های ماتریسی


جلسه دوم:

تعیین متغیرهای ماتریسی و وارد کردن جملات LMI در تولباکس متلب


جلسه سوم:

معرفی دستور feasp تولباکس متلب جهت حل LMI


جلسه چهارم:

معرفی دستورات mincx و gevp تولباکس متلب جهت حلمسایل مینیمم‌سازی


جلسه پنجم:

طراحی کنترل کننده فیدبک حالت برای سیستم خطی و حل LMI های آن با تولباکس متلب


جلسه ششم:

معرفی تولباکس یالمیپ برای حل LMI و نجوه دانلود و نصب آن


جلسه هفتم:

تعریف متغیرهای ماتریسی و قیدها با استفاده از تولباکس یالمیپ


جلسه هشتم:

تعریف تابع هزینه و حل LMI با استفاده از تولباکس یالمیپ


جلسه نهم:

معرفی و تشریح نحوه دانلود و نصب سه solver پرکاربرد به نامهای PENBMI ، SDPT3 و MOSEK 


جلسه دهم:

معرفی دینامیک غیرخطی قطار مغناطیسی شناور و خطی‌سازی حول نقطه کار


جلسه یازدهم:

طراحی و شبیه‌سازی فیدبک حالت برای سیستم شناور مغناطیسی


برای خرید تمامی جلسات با ۱۰ درصد تخفیف گزینه آخر را انتخاب کنید

برای خرید کلیک فرمایید

 

۱۷۹ نظر

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

    1. @علیرضا,
      با سلام و تشکر از لطف شما
      بابت این مشکل از شما عذرخواهی میکنم و از مدیر سایت پیگیری میکنم تا در اسرع وقت این مشکل شما برطرف بشه.
      از اینکه این

      1. @علی جوادی,
        ممنونم از لطف شما، اگه امکان داره حتی المقدور سریعتر پی گیری بفرمایید تا امکان استفاده از ویدیوهای شماره شش به بعد رو داشته باشم. بسیار ممنونم جناب دکتر

  2. با سلام خدمت آقای دکتر
    چطور میشه یک کنترل کننده فیدبک خروجی دینامیکی برای یک سیستم درجه ۵ طراحی کرد؟( من جلسه پنجم که مربوط به طراحی کنترل کننده هست رو کامل گوش کردم ولی نتونستم این طراحی رو انجام بدم ) ممنون میشم راهنماییم کنید

    1. @mina,
      با سلام و عرض معذرت به خاطر تاخیر در پاسخگویی
      مبحث مورد اشاره در جلسه ۵ فقط طراحی فیدبک حالت برای سیستمهاست و در مورد فیدبک خروجی حرفی زده نشده. برای اینکار باید فرمولبندی مساله رو از اول انجام بدید (ساختار کنترل کننده رو تشکیل بدید) و بعد LMI های مورد نیاز برای پایداری سیستم حلقه بسته رو بدست بیارید و برای سیستم خودتون حل کنید. مثلا اگر از رویتگر لیونبرگر استفاده کنیم، میشه مساله رو به LMI تبدیل کرد. برای اطلاعات بیشتر به آموزش زیر مراجعه کنید:
      http://www.controlref.com/output-feedback/

  3. سلام آقای دکتر
    وقت بخیر و خدا قوت
    ببخشید سوالی داشتم ممنون میشم راهنمایی بفرمایید :
    من طبق یالمیپ برنامه نویسی انجام دادم … در مقاله م تابع هزینه ای به همان فرم متداول کنترل بهینه دارم … مساله بیان شده در قالب چند LMI است ولی مینیمم سازی ندارم…یعنی ندارم min کن مثلا (tr(Q را سابجکت تو این LMIها….
    حالا سوالم اینه که در دستور optimize برای قسمت تابع هزینه ش چی تعریف کنم؟….خالی بذارم بصورت []…یا خیر بیام همان تابع هزینه کوادراتیک رو اینجا تعریف کنم ؟
    با تشکر

  4. با سلام
    در یک مسعله بهینه سازی اگر تابع هدف یک نامساوی ماتریسی خطی بود چگونه می توان آن را حل کرد m=argmax G<0
    m
    یعنی m ای که بتواند G<0 را ماکسیمم کند کهG ماتریس است
    و m یک ماتریس قطری است

    1. @عرفان,
      سلام
      من صورت مساله رو نفهمیدم
      البته اینجا فقط نحوه حل یک مساله LMI توضیح داده شده و روشهای تبدیل یه مساله به مینیمم سازی یا نامساوی یه مبحث دیگه است

  5. سلام من بسته اموزشی از این سایت خریداری کردم ولی متاسفانه لینک به ایملیم فرستاده نشده…فوری لازمش دارم…ممنون میشم اگر رسیدگی کنید

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

    1. @mina,
      سلام
      این سوال خیلی کلیه. بسته به اینکه سیستم خطی باشه یا غیرخطی، نامعینی داشته باشه یا نه و … تحلیل پایداری با LMI متفاوته ولی نقطه مشترک برای تمام حالتها استفاده از روش مستقیم لیاپونوف هستش.
      به نظرم بهتره از حالت ساده (سیستم خطی بدون نامعینی) که جلسه ۵ مطرح کردم شروع بکنید

  7. با سلام و عرض تبریک سال نو خدمت شما آقای دکتر جوادی

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

    سپاس فراوان

        1. @یاسمن,

          آقای دکتر جوادی، هنگام تست mosek این پیغام خطا داده می شود.
          Warning: MOSEK Fusion is not configured correctly; check that mosek.jar is added to
          the javaclasspath.
          گویا باید مجددا به مسیر متلب اضافه شود؟

          باز هم از اینکه راهنمایی می فرمائید سپاسگزارم.

          1. @یاسمن,
            این عبارتی که شما تحت عنوان خطا معرفی کردید در واقع یک هشداره و نه خطا. معمولا خطا مانع کار کردن کد میشه نه هشدار. ظاهرا لایسنس شما داره کار میکنه ولی فقط برای استفاده از fusion باید طبق راهنمای زیر عمل کنید:
            https://goo.gl/gfwK6a
            البته من تا حالا از fusion استفاده نکردم و اطلاعات بیشتری در موردش ندارم.
            در همین حالت ببینید که تولباکس یالمیپ با mosek کار میکنه یا نه. اگر کار نکرد طبق راهنما عمل کنید

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

              بهرحال از شما سپاسگزارم.

  8. سلام آقای جوادی
    سوالی داشتم که ممنون میشم راهنمایی بفرمایید
    یکی از متغیرهای من ماتریس V هست که ابعادش ۴*۲ می باشد که با دستور lmivar تعریف گردید. حالا در یکی از LMI ها ، سطرهای ماتریس V وجود دارند یعنی vi ها….
    حالا چون من دو سطر دارم بنابراین v1 و v2 خواهم داشت….که بصورت زیر بیان گردید:
    V=lmivar(2,[2 4])
    lmiterm([2 1 2 V(1,:)],1,1)
    .
    .
    lmiterm([3 1 2 V(2,:)],1,1)
    ولی متلب خطا می دهد Index exceeds matrix dimensions.
    ممنون میشم راهنمایی بفرمایید.

    1. @محمد,
      سلام
      باید بردارهای v1 و v2 رو با ضرب ماتریسهای مناسب در متغیر اصلی تولید کنید.
      مثلا به جای v1 باید از عبارت V*[0 1] استفاده کنید
      همینطور V*[0 1]=v2 رو باید در LMI استفاده کنید
      یه روش دیگه هم اینه که v1 و v2 رو به عنوان دو متغیرهای مساله (به جای V) تعریف کنید و از اونها داخل LMI استفاده کنید. بعدا که جواب بدست اومد میتونید V رو از روی v1 و v2 بسازید.
      البته همونطور که در فیلمها هم گفتم بهتره از تولباکس یالمیپ استفاده کنید چون این کارها اونجا خیلی راحتتر انجام میشه
      موفق باشید

  9. سلام آقای دکتر
    وقت بخیر
    ابتدا از جنابعالی بخاطر همه ی ویدئوهای مفید و به دور از نگاه بازاری، که دراین سایت قرار دادید ا سپاسگزارم.
    من یک LMI دارم که یکی از درایه های آن Q^ -1 می باشد . ماتریس Q یکی از متغیرهای من هست که با دستور sdpvar تعریف شده است.
    ضمنا شرط Q>0 نیز جز محدودیت ها لحاظ شده . (Q ماتریس مربعی ۴در ۴ است.)
    ولی هنگام run این خطا را می دهد:
    Only scalars can have negative or non-integer powers
    در صورت امکان راهنمایی بفرمایید.

    1. @لیلا,
      با سلام و تشکر از لطف شما
      مشکل این جاست که شما LMI ندارید بلکه NMI دارید چون هم خود Q رو دارید و هم معکوسش رو. بنابراین نمیتونید مستقیما مساله خودتون رو با متلب حل کنید.
      باید از یه روشی مثل Cone Complementarity Linearization یا CCL استفاده کنید تا NMI رو به LMI تبدیل کنید. برای مشاهده الگوریتم CCL مثلا میتونید به مقاله زیر مراجعه کنید:
      http://ieeexplore.ieee.org/document/618250

      1. @علی جوادی,

        ممنون از وقتی که گذاشتید.
        آقای دکتر ،دو تا مساله ای که یادم رفت بگم خدمتتون:
        ۱) این بود که مقاله در داخل LMI ماتریس Q^-1 را مستقیما وارد نکرده بلکه اومده یه متغیر جدیدی بصورت G=Q^-1 رو تعریف کرده و داخل LMI از متغیر G استفاده کرده …..آیا این مطلب کمکی می کنه؟
        ۲) ضمنا خود مقاله بارها روابط رو LMI معرفی می کند…
        واقعا ممنون میشم نظرتون رو بفرمایید.

        1. @لیلا,
          خوب اگر G رو به عنوان یک متغیر جدید تعریف کرده و خود Q (که معکوس G هستش) هم داخل ناتساوی موجوده، بنابراین باز هم یک متغیر دارید که هم خودش و هم معکوسش در ناتساوی وجود داره و بنابراین باز هم LMI نیست.
          ممکنه مقاله با یه روشی مساله رو به LMI تبدیل کرده و معکوس رو بنحوی از بین برده. مقاله رو با دقت بیشتر بخونید
          امیدوارم این توضیحات کمک کرده باشه

  10. سلام مهندس ببخشید راجب plotها سوال داشتم که یادم رفته یه جایی بود که بدون حفظ دستور میانبر میرفتیم نتایج شبیه سازیو مثلا زمان میدادیم یا صفحه سیاهو زمینشو سفید میکردیم الان میرم اونقسمت ولی توی اون نوار ابزار که گزینه بیشتری بود الان فقط چهار تا هست یقیه نیستن مثلا یک پنجره سمت راست بالای توی اون تنظیمات بود اون نیس یا مثلا میخواستیم اسم برای هر نموار بغل تصویر بزاریم لطفا راهنمایی کنید.

  11. با سلام
    بنده دنبال یه مقاله نه خیلی سخت در زمینه LMI هستم ( با کد های آماده ) می خواستم بدونم که یه چنین مقاله ای دم دستتون هست ؟
    (البته من قبلا مقاله قطار رو از سایتتون خریداری کردم اگه ممکنه یه مقاله دیگه باشه )

    1. @محمد غضنفری,
      سلام موضوعی که شما میخواید برای ما مقدور نیست اما در مورد اینکه یه آموزش مثل آموزشی که خریداری کردید رو بخواید باید هشت نفر پیش خرید انجام بدن تا مقاله ای با محوریت موضوع شما آماده بشه. یا اینکه شما هزینه هشت نفر رو پرداخت کنید.
      سپاسگزارم

  12. @امیر یوسف زاده,
    سلام
    تخفیف ۲۰ درصدی کل جلسات در قیمت نهایی اعمال شده است. اگر دقت کنید قیمت کل جلسات ۶۰۰۰۰ تومان است ولی با ۲۰ درصد تخفیف ۴۸۰۰۰ تومان قیمت گذاری شده است

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

    1. @مسعود,
      بله منظورم همون تولباکس یالمیپ هستش. اون خطایی که گفتید بعد از نصب تولباکس نباید ببینید مگر اینکه خطای دیگری ببینید. مثلا ممکنه مشکل از این باشه که شما solver مورد استفاده در کد رو ندارید که در اینصورت کافیه در دستور sdpsettings نوع solver رو انتخاب نکنید تا خود تولباکس از solver هایی که داره انتخاب کنه

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

    1. @مسعود,
      اگر تولباکس رو درست نصب کرده باشید، قطعا نباید همون خطا رو ببینید به خاطر اینکه دستور sdpvar داخل تولباکس تعریف شده. با روشی که در جلسه ۶ گفتم (دقیقه ۳۴)، نصب تولباکس رو تست کنید

  15. ممنون از پاسخگویی سریع و دقیقتون.
    اینکه من از روش تکراری استفاده کردم برای این بود که به عنوان مثال یکبار آلفا را ثابت فرض میکنم بعد نسبت به بتا مینیمم سازی انجام میدهم سپس این روند را برای آلفا به کار میگیرم.
    مسئله که بنده بر روی آن کار میکنم به شکل زیر است:
    Maximize α
    X,S,M1,M2
    Minimum β
    X,S,M1,M2
    Subject to X>0, β>0, α>0,S>0
    [I S ;S I)]>0
    -A1 X+BM1-XA1^T+M1^T B^T-2αX>0
    -A2 X+BM2-XA2^T+M2^T B^T-2αX>0
    [βS {(A1X – BM_1 )-(A2 X – BM2)}^T; {(A1 X-BM1 )-(A_2 X-BM2)}; I)]>0
    با توجه به مسئله بالا یعنی روش حل بنده مشکل داشته است؟
    اگر امکانش هست میشه لطف کنید، بگید برای حل اینگونه مسائل باید از چه روشی استفاده کنم؟

    1. @Elham,
      داخل ناتساوی ها حاصلضرب آلفا و ایکس و همچنین بتا و اس وجود داره و بنابراین با solver های عادی نمیشه مساله رو حل کرد چون ناتساوی ها اصلا LMI نیستند. پیشنهاد من اینه که شما هر بار آلفا و بتا رو یه مقداری تعیین کنید و مساله feasibility رو حل کنید به جای مینیمم سازی. اگر جواب داد بتا رو کمتر و آلفا رو بیشتر کنید و در غیر اینصورت برعکس عمل کنید. این کار رو تا جایی ادامه بدید تا هم LMI ها feasible بشه و هم تا حد ممکن بتا مینیمم و آلفا ماکزیمم بشه.

  16. با سلام و عرض ادب.
    ضمن تشکر از مطالب بسیار خوب و عالی که در اختیار مخاطبین قرار می دهید.
    بنده می خواهم مسئله decay rate و همزمان سازی را در سیستم های آشوب با استفاده از مدل T-Sحل کنم که این مسئله در نهایت به چند LMI منجر خواهد شد که در این LMI ها باید پارامتر آلفا را ماکزیمم کنم(decay rate) و پارامتر بتا را مینیمم کنم (لازم به ذکر است که بتا باید یک مقدار مثبت بسیار کوچک باشد)
    اما متاسفانه پس از حل LMI ها مقادیری که ماتریس بهره به خود میگیرد بسیار بزرگ می باشد و باعث ناپایداری سیستم می شود.
    که برای حل این مسئله هم از yalmip استفاده کرده ام و هم از متلب که متاسفانه هر دو جواب نمیدهد.
    میخواستم ببینم برای حل اینگونه LMI ها روشی غیر از روش های تکراری وجود ندارد؟
    واین که در کل اینگونه LMI ها را باید چگونه حل کرد؟

    1. @Elham,
      با سلام و تشکر از لطف شما
      اولا که باید ببینید ناتساوی های شما نسبت به آلفا و بتا خطی هستند یا نه. اگر خطی نباشند، شما دیگه LMI ندارید و ممکنه BMI یا یه ناتساوی غیرخطی باشه.
      ثانیا معلوم نیست شما چرا از روش تکراری استفاده کردید. اگر LMI داشته باشید نیازی به روش تکراری نیست و به راحتی با تولباکس متلب یا یالمیپ قابل حله.
      ثالثا بزرگ بودن بهره مهم نیست بلکه مهم اینه که LMI ها feasible شده باشند و معیار مورد نظر مینیمم یا ماکزیمم شده باشه.
      توصیه میکنم اول مطمین بشید که مساله شما یک مساله بهینه سازی محدب هست و بعد از تولباکس متلب یا یالمیپ استفاده کنید

  17. با سلام من پروزه قطار شناورlmiرو دانلود کردم خطای زیرو میده و برنامه ران نمیشه تا نتیجه رو ببینم.
    خطا به صورت زیر استundefined function or variable ‘sdpvar’
    Error in state-feedback-maglev(line27)
    xy=sdpvar(n,n);Yy=sdpvar(ni,n);

    1. @مسعود,
      شما تولباکس YALMIP رو نصب نکردید و بنابراین MATLAB دستوراتی مثل sdpvar رو نمیشناسه. توضیحات تکمیلی در مورد نحوه دانلود و نصب این تولباکس در جلسه ششم وجود داره. همچنین نحوه استفاده از دستورات این تولباکس و solver های مختلف در جلسات هفتم تا نهم به طور کامل توضیح داده شده

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

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

یک پاسخ بنویسید

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