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

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

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

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


جلسه اول:

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


جلسه دوم:

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


جلسه سوم:

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


جلسه چهارم:

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


جلسه پنجم:

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


جلسه ششم:

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


جلسه هفتم:

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


جلسه هشتم:

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


جلسه نهم:

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


جلسه دهم:

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


جلسه یازدهم:

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


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

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

 

۱۷۹ نظر

  1. سلام آقای دکتر
    سوالی داشتم خدمتون :برای یک سیستم که LPV هستش چه حلگری پیشنهاد می کنید چون تا الان از cvx و yalmip و … استفاده کردم که متاسفانه نه فیزیبل می شود و نه پایدار. به نظرتون مشکل از حلگر هستش یا LMI رو درست وارد نکردم. لطفا به ایمیلم پاسخ بدید . با تشکر…

    1. سلام
      بابت تاخیر عذرخواهی میکنم اینترنت امروز وصل شد.
      شما اول با تولباکس متلب امتحان کنید اگر فیزبل نشد یعنی یا LMI درست نیست یا کدها درست وارد نشده یا پارامترها تنظیم نشده و …
      در کل برای اکثر مسایل اگر LMI ها با تولباکس متلب قابل حل باشند، با یالمیپ و cvx هم قابل حل هستند

  2. سلام آقای دکتر
    ضمن تشکر از شما بابت آموزش مفیدتان، من دو LMI دارم به صورت زیر:
    ۱- ۰>A’*P+P*A-C’*R1-R1’*C
    ۲- B’*P+P*B-C’*R2-R2’*C<0
    ماتریس های P و R1 و R2 متغیرها می باشند که باید به دست آورده شوند
    برای حل همزمان این دو LMI و به دست آوردن ماتریس های گفته شده، به چه صورت باید LMI ها را برای متلب تعریف کنم؟
    باتشکر

    1. سلام
      لطفا به فیلمهای آموزشی مراجعه کنید.
      تمام دستورات متلب با مثالهای متنوع ارائه شده و به راحتی میتونید مساله خودتون رو حل کنید

  3. سلام دکتر عزیز
    ما دقیقا به دستور gevp نیاز داریم که شما بین این همه دستور دقیقا همین رو نگفتید
    میشه لطفا یه مثال در این زمینه حل کنید؟
    یا یه مثال بفرستیم شما اون رو حل کنید؟

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

  4. درود
    دانشجوی دکتری کنترل هستم.
    لطفا بجای واژه fesible از واژه معادل فیزا و بجای واژهfeasiblity از فیزایی استفاده شود تا واژه جای خود را پیدا کند در زبان فارسی.
    واژه دقیقی برای feasible در زبان فارسی وجود ندارد.
    نامساوی ماتریسی خطی فیزاست بجای شدنی است!.
    فیزا یا feasible به معنی امکان پذیر در عمل.
    فیزا و فیزایی

    1. سلام
      ممنون از راهنمایی ولی دیگه برای من دیر شده چون سالها استفاده کردم و سختمه کلمه دیگری استفاده کنم.
      شاید برای کسانی که تازه شروع به کار با LMI میکنند مفید باشه
      سپاس

  5. با سلام و عرض ادب خدمت شما آقای دکتر
    بنده یک کد LMI با استفاده از تولباکس YALMIP نوشتم. ایرادی که در این کد دارم این هست: زمانی که بنده می خوام اینورس یک متغیر را که به صورت sdpvar در ابتدای برنامه تعریف کردم در Constrain ها استفاده کنم با ارور مواجه میشم. بنده می خوام این دستور را تایپ کنم
    دستور: ۰<[X*inv(Y)*X] ، هم متغیر X و هم Y قبلا به صورت sdpvar تعریف شده اند از اینرو با ارور زیر مواجه میشم:
    Undefined function 'inv' for input arguments of type 'sdpvar'.
    می خوام بدونم من چطور می تونم از اینورس sdpvar ها توی Constrain ها استفاده کنم.
    خیلی خیلی ممنونم میشم اگر کمکم کنید.
    با تشکر از شما

  6. خب در اجرای کد هم ظاهرا به مشکل می خوره. و این پیام رو میده:
    Mosek error: MSK_RES_ERR_MISSING_LICENSE_FILE (License cannot be located. The default search path is ‘;C:\Users\Shaygan\mosek\mosek.lic;’.)

  7. سلام. من سلور mosek رو با توجه فیلم آموزشی حل ناتساوی ها ماتریسی نصب کردم. و لایسنس مربوطه رو هم نصب کردم. ولی در اجرای دستور mosekdiag خطای زیر رو میده:
    chek that mosek. jar is added to the javaclasspath

    1. سلام
      برای من این مشکل پیش نیومده یا حداقل یادم نیست اگرم پیش اومده
      اما داخل فایل PDF راهنمای استفاده از mosek (صفحه ۸) گفته که این پیام که شما گفتید یک هشداره (warning) نه خطا (error)
      و گفته که این هشدار در محیط متلب مشکلی ایجاد نمیکنه.

  8. با عرض سلام و خسته نباشید؛
    جناب دکتر جوادی، ممکن است که حل کننده LMI تولباکس متلب نتواند جواب را پیدا کند، در حالی که جعبه ابزار YALMIP بتواند جواب را پیدا کند؟

    1. با سلام
      اگر هدف حل LMI باشه و بنابراین مساله محدب باشه، تولباکس متلب اصولا باید بتونه حلش کنه
      ولی ممکنه تو حالتهای مرزی و خیلی سخت، تولباکس متلب جوابهای دقیق نداشته باشه
      در این حالتها می‌تونید از سالورهای قوی YALMIP استفاده کنید.
      تجربه نشون میده برای اکثر مسایل همون تولباکس متلب هم جواب میده و بیشتر به خاطر راحتی از YALMIP استفاده میشه

  9. سلام و ادب
    بنده قصد دارم یک مقاله کنترل مقاوم را با LMI و تولباکس Yalmip شبیه سازی کنم آیا فقط قسمت ۷ و ۸ را بخرم کافیه؟.

    1. سلام
      جلسات ۶ و ۷ و ۸ و ۹ مربوط به تولباکس yalmip هستند و برای کار شما کافیه. برای اطلاعات بیشتر به توضیحات هر جلسه مراجعه کنید.

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

    1. @نسرین,
      سلام
      یک روش ساده اینه که برای هر متغیر یه حلقه for بنویسید و به ازای مقادیر مختلف هر متغیر ببینید آیا LMI ها فیزیبل هستند یا نه (و مقادیر مرزی هر متغیر رو ذخیره کنید) و محدوده فیزیبل بودن رو به صورت عددی بدست بیارید. البته محدوده تغییرات هر متغیر و رزلوشن تغییرش در هر مرحله رو باید خودتون تعیین کنید.

    2. ممنون
      یه سوال دیگه هم دارم در فیلمها چند بار ذکر شده که lmi ها حتما متقارن هستند. چرا؟ من lmi ای دارم که متقارن نیست! اما تمام خصوصیات و ظاهر آن مشابه یک lmi است. چکار باید بکنم؟ در روش حل فرقی دارد؟ به متلب که دادم با روشی که در فیلمها آمده بود خطایی نگرفت.

  11. ممنون از راهنماییتون
    من در نت گشتم مثل اینکه این سالور رایگان نیست. از کجا میتونم این سالور رو رایگان دانلود کنم؟

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

  12. سلام
    bmi زیر رو با تولباکس یالمیپ نوشتم ولی متاسفانه فیزیبل نمیشه. راه حل برای جواب گرفتن از این برنامه چیه؟
    ممنون

    % LMI Variables
    m11 = sdpvar(n,n);
    m21 = sdpvar(n,n);
    m12 = sdpvar(n_t,n_t);
    m22 = sdpvar(n_t,n_t);
    M12 = zeros(n,n_t);
    M21 = -M12′;
    F1 = sdpvar(n,1);
    F2 = sdpvar(n_t,1);
    F_F = [F1*C zeros(n,1) ; F2*C 0];
    M_tk = [m11 M12 ; M21 m12];
    M_tk_plus = [m21 M12 ; M21 m22];

    % LMI Terms
    Sai1 = A’*m11+m11*A+(m11-m21)/Delta+(eps1*kf^2+eps2*kh^2*k_theta^2)*eye(3,3)-alpha*m11;
    Comm = (1/eps1)*eye(3,3)+(1/eps2)*B*(B’);
    Sai2 = A’*(m21-m11)+(m21-m11)*A-alpha*(m21-m11);

    % Main LMIs
    F = ([Sai1 m11*Comm ; Comm*m11 -Comm]<0);
    F = F + ([Sai2 (m21+m11)*Comm ; Comm*(m21-m11) -Comm]<0);
    F = F + ([(m12+m22)/Delta m12 ; m12 -m12/alpha]<0);
    F = F + (m12-m220);
    F = F + (m21>0);
    F = F + (m12>0);
    F = F + (m22>0);
    F = F + ([-sigma*M_tk (eye(4,4)+F_F)’*M_tk_plus ; M_tk_plus*(eye(4,4)+F_F) -M_tk_plus]<0);

    % Solve LMIs
    ops = sdpsettings('solver','');
    solution = solvesdp(F,[],ops);

    % Results
    m11_feasible = double(m11)
    m21_feasible = double(m21)
    m12_feasible = double(m12)
    m22_feasible = double(m22)
    F1_feasible = double(F1)
    F2_feasible = double(F2)

    1. @نسرین,
      سلام
      به نظرم شما باید اول فیلمهای آموزشی رو با دقت خیلی زیاد ببینید چون خیلی اشکالات داخل کد دارید که با دیدن فیلمها همگی برطرف میشه (اشکالاتی مثل استفاده نادرست از دستورات تولباکس و …).
      و اما در مورد BMI باید بگم اگر شما BMI بخواهید حل کنید، یکی از بهترین روشها نصب سالور PENBMI هستش که ظاهرا شما انجام ندادید.
      لطفا فیلمها رو با دقت حیلی بیشتر ببینید چون همه چیز (از جمله سالورها) رو اونجا توضیح دادم
      موفق باشید

  13. سلام وروز بخیر خدمت شما اقای دکتر ببخشید ی سوال داشتم مقاله ای رو شبیه سازی کردین با توضیحش در زمینه فازی که بتونیم شبیه سازی مقاله رو یاد بگیریم با کنترل کننده فازی نوع ۱و۲ اگه اموزش دادین لینک لطف کنید من تهیه کنم ممنون اموزش LQR عالی بود دستتون درد نکنه

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

  14. سلام و عرض ادب
    آموزش خوبی بود. فقط مسله اینجاست که من نمیتونم الان مسله خودم رو حل کنم.
    پنج تا ماتریس درنهایت من بایستی بدست بیارم. K1,K2,M.P,S (متغیرها) که اینطور تعریف شدن :
    (P=sdpvar(4,4
    (S=sdpvar(4,4
    (M=sdpvar(4,4
    (‘K1=sdpvar(4,1,’full
    (‘K2=sdpvar(4,1,’full
    و اینکه P>0 , S>0 هستن . LMI ای که من تعریف میکنم به این شکل هست:
    [F=[P>=0
    [F=[S>=0
    F= [A1’*P+P*A1-M’-M+I M+P*A1-P*A1+P*A2 P*E
    M’+A1’*P+A2’*P-A1’*P A2’*S+S*A2+C’*K2’+K2*C+A1’*S+S*A1+C’*K1’+K1*C+C’*C S*E
    E’*P E’*S -(gama^2)] <=0
    در ادامه :
    (op=sdpsettings('verbose',0
    (optimize(F

    البته اول با کدهای موجود در متلب حل کردم و نشد و با yalmip شروع به حل کردم.
    میخوام بدونم برای حل اینجور LMI ، چطور اقدام کنم؟

    ممنون میشم پاسخ بدید
    تشکر فراوان

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

    1. @m,
      سلام
      اگر یک کنترل کننده مقاوم در برابر نامعینی در نظر دارید، به سری فیلم زیر مراجعه کنید:
      http://www.controlref.com/output-feedback-uncertainty/
      اگر یک کنترل کننده مقاوم در برابر اغتشاش در نظر دارید، به سری فیلم زیر مراجعه کنید:
      http://www.controlref.com/output-feedback-disturbance/
      و اگر یک کنترل کننده مقاوم در برابر اغتشاش و نامعینی در نظر دارید، به سری فیلم زیر مراجعه کنید:
      http://www.controlref.com/robust-output-feedback-disturbance-uncertainty/
      اگر مباحث داخل این فیلمها رو خوب یاد بگیرید، به راحتی میتونید خودتون کنترل کننده فیدبک خروجی غیر مقاوم رو بدست بیارید
      موفق باشید

  16. سلام آقای دکتر جوادی
    میخاستم راجع به خریداری Solver PENBMI بپرسم، که چطوری هزینه پرداخت میشه به یورو یا به پول ایران؟
    و اینکه یک سوال راجع به مکمل شور ، این که برای یک ماتریس ۳*۳ چطوری مکمل شور رو مینونم بنویسم؟؟؟
    درست مکمل شور برای ماتریسهای بلوکی هست ولیکن اگر یک ماتریس ۳*۳ داشتیم چطوری میتونم براش مکمل شور رو اعمال کنم ؟
    ممنون میشم راهنماییم کنید

    1. @فاطمه,
      سلام
      من که از طریق یه صرافی پرداخت رو به ریال انجام دادم ولی یه درصد بالایی گرفت. شما اگه حساب ارزی دارید، به شماره IBAN در سایت زیر وجه رو به دلار یا یورو واریز کنید و بعد رسید رو به ایمیلی که داخل همین صفحه هست، بفرستید:
      http://www.penopt.com/order.html
      مکمل شور به طور کامل داخل فیلمها بحث شده. لطفا با دقت بیشتر فیلمها رو ببینید.
      موفق باشید

      1. خیلی ممنونم. بله من به طور کامل فیلم هرو دیدم ، کلا همه جا مکمل شور رو برای ماتریسهایی گفته که چهار تا بلوک دارن ، اگر تعداد بلوک ها مثلا ۹تا باشه چی؟

  17. جلسه ۱۱ مقاله ای که شبیه سازی کردید در فایل ها نیست و فایل zxp قابل اجرا نیست و ودیو آموزشی هم نیست. این دومین بار هست از این سایت خرید می‌کنم و هر با ناراضی بودم.

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

    2. @آنیتا,
      سلام
      از مشکلاتی که برای شما پیش اومده عذرخواهی میکنم.
      در مورد مقاله باید بگم که چون داخل فایلهای جلسه ۱۰ مقاله وجود داشت و من هم فکر نمیکردم کسی جلسه ۱۱ رو بدون جلسه ۱۰ خریداری کنه ، مقاله رو دوباره داخل فایلهای جلسه ۱۱ اضافه نکردم. اگر جلسه ۱۰ رو دارید، مقاله رو از اونجا بردارید و اگه جلسه ۱۰ رو خریداری نکردید، بگید تا براتون مقاله رو ایمیل کنم یا خودتون دانلود کنید

  18. با عرض سلام و احترام خدمت آقای دکتر
    آیا در این فایلهای آموزشی در مورد CVX هم توضیح داده شده است یا خیر؟
    با تشکر

  19. آقای دکتر جوادی
    در رابطه با مشکلی که قبلا عنوان کردم (کدهای جلسات شش به بعد، هیچ کدوم دارای اعتبار نیستن) باید عرض کنم، نه شما اقدامی کردید و نه مدیر سایت. من به طور کامل پکیج رو خریداری کردم و مبلغش رو به طور کامل یکجا پرداخت کردم.
    به مدیر سایت پیغام دادم. ایشون عنوان کردن که در تلگرام براشون پیام بذارم تا کدها رو ارسال کنن اما چنین نشد که نشد.
    کدها رو براشون ارسال کردم تا چک کنن که این کدها کار نمیکنه، من باید از چه طریقی مساله رو پی گیری کنم. آیا خدا رو خوش میاد؟

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

پاسخ دادن به m لغو پاسخ

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