(1)使用环境:matlab 2014a 。LMI工具包不用安装,可以直接使用。

(2)LMI toolbox: Linear Matrix Inequality,线性矩阵不等式。

(3)如何定义一个LMI系统:

1.初始化一个 LMI 系统

setlmis([])        注意这只是定义一个LMI系统,并不是定义了一个 LMI不等式。LMI不等式需要用newlmi函数定义。
如果想把一个之前定义好的LMI系统LMIS0引入进来
setlmis(LMIS0)
2.定义LMI变量
       2:矩形结构
            如lmivar(2,[3 5])表示大小为3*5的普通矩阵
     3:一般结构
            为了有助于描述这一类型的矩阵变量,lmivar提供了两个额外的输出,它的一般表达式是:[X,n,sX]=lmivar(type,struct)
            其中n和sX是提供的两个额外输出n表示到目前为止使用的决策变量的总数,sX表明了变量X中的每一个元依赖于决策变量的哪个元。
             例:定义,其中X1和X2分别是2*3维和3*2维的长方矩阵
        (第三种结构可以用来表示矩阵型中间变量,例如上面的X变量依赖于矩阵变量X1和X2。可以用下面的代码表示这个中间变量)
                    
                    
 第二组变量([]内的内容): 描述矩阵中的块矩阵的结构
     以X为例:第一个参数数表示块矩阵的大小 6*6的块矩阵
            第二个参数表示块矩阵的形式,可以是1,0,-1
               1:全对称块
              0:标量矩阵:即单位矩阵乘以常数
               -1:0矩阵
                以S为例:[] 中用;隔开的有两组数据,表示S的对角线上有两个矩阵块
                     (S的例子)
3.定义LMI不等式中的每一个项(lmiterm)  
线性矩阵不等式(LMI)中的项:
     以这个LMI不等式为例,其中的项(lmiterm)有ATX + XA, CTSC, XB, and –S

(4)LMI系统求解
对于LMI Lab, 其中有三种求解器(solver): feasp,mincx和gevp。
每个求解器针对不同的问题:
    feasp:解决可行性问题(feasibility problem),例如:A(x)
    mincx:在线性矩阵不等式的限制下解决最小化问题(Minimization of a linear objective under LMI constraints),例如最小化c'x,在限制条件A(x) < B(x)下。
    gevp:解决广义特征值最小化问题。例如:最小化lambda
 1.利用feas得到LMI的解
      lmis = getlmis;
        [tmin, feas] = feasp(lmis)    %该式中的feas就是求得的解
  2.运行后,就调用dec2mat把决策变量转化为矩阵形式。
        Q = dec2mat(lmis, feas, Q)
        Q =            1.9253   -2.2338            -2.2338    9.1054
LMI toolbox的更详尽的使用可以参考以下连接:
http://read.pudn.com/downloads104/ebook/428541/LMI%20%E5%B7%A5%E5%85%B7%E7%AE%B1%E4%BB%8B%E7%BB%8D.pdf
matlab官网的相关资料:
https://cn.mathworks.com/help/robust/ug/specify-lmi-system-at-the-command-line.html
https://cn.mathworks.com/help/robust/lmis.html
定义lmiterm:
lmiterm()函数说明:
   第一个参数是一个四维向量:
     向量中的第一个参数:
            表示这个项属于哪个不等式,正数表示该项在不等式的左边,负数表示在不等式的右边。
        向量中的第二个和第三个参数:
            表示该项属于矩阵中的哪个矩阵块
      向量中的第四个参数:
            表示该项中包含哪个LMI变量(可以参考2.定义LMI变量)
          K表示包含第K个LMI变量(也就是第K个被定义的LMI变量,如2中X是第一个LMI变量,S是第二个LMI变量)
          -K表示包含第K个LMI变量的转置
            0表示单位矩阵I
     例如上面第一个lmiterm:lmiterm([1 1 1 1],1,A,'s');     %定义了ATX + XA        
               中的[1 1 1 1]表示该项在第一个不等式的左边矩阵的 (1,1)处的矩阵块中,包含第一个LMI变量(X)
   额外参数:    lmiterm([1 1 1 1],1,A,'s');     %定义了ATX + XA        
               中多了一个额外参数,'s'表示symmetry,即加上本项的转置。 
               lmiterm([1 1 1 1],1,A);表示XA      lmiterm([1 1 1 1],1,A,'s');表示该项加上自身的转置,所以该项为ATX + XA 

         在lmiterm函数中直接使用名称:
               四维向量中第一个参数如果是数字K则表示第K个LMI不等式,也可以直接用不等式的名称代替。
                         例如:Xpos = newlmi;     lmiterm([-Xpos 1 1 X],1,1);    表示定义了一个新LMI不等式,这次定义的项在Xpos不等式的右边部分。
               四维向量第四个参数如果是常数K,表示该项中含有第K个被定义的LMI变量。也可以直接用变量的名称作为这个参数。
                       例如:lmiterm([-Slmi 1 1 S],1,1);    表示该项中包含的LMI变量是S

4.得到问题的内部表示
当LMI系统完全定义完成之后,即lmivar(变量),lmiterm(项),lmi(项)都定义完毕。使用下面的命令行结束定义。该命令行只能使用一次。
      LMISYS = getlmis;
   第二个参数和第三个参数:
      表示该项中矩阵变量两边乘上的系数:
         可以是常量值,也可以将矩阵作为系数。
             
       例如 lmiterm([1 1 1 2],C',C);    %定义了CTSC     第二个和第三个参数表示矩阵变量(S)左乘矩阵C的转置,右乘矩阵C
  lmiterm([1 1 1 1],1,A,'s');     %定义了ATX + XA
    lmiterm([1 1 1 2],C',C);   %定义了CTSC
    lmiterm([1 1 2 1],1,B);     %定义了XB
    lmiterm([1 2 2 2],-1,1);    %定义了–S

setlmis([])
[R,~,SR]=lmivar(1,[3 1]);
[P,~,SP]=lmivar(1,[3 1]);
A=[2,0,0;0,2,0;0,0,2];
[ph1,~,Sph1]=lmivar(3,A*SR);%错误的,不会报错,但这样得到的解ph1不会等于 A*变量R
[ph2,~,Sph2]=lmivar(3,2*SR);%也是错误的,不会报错,但这样得到的解ph2不会等于变量R的二倍
[ph3,~,Sph3]=lmivar(3,-SR);%正确的,解出的ph3会等于-R
[ph4,~,Sph4]=lmivar(3,SR');%正确的,解出的ph4会等于变量R的转置

%定义X1和X2
setlmis([])
[X1,n,sX1] = lmivar(2,[2 3]);
[X2,n,sX2] = lmivar(2,[3 2]);
%定义第三类型矩阵X
[X,n,sX] = lmivar(3,[sX1,zeros(2);zeros(3),sX2]);
       注意:用第三种方法表示变量时,被表示变量只能用 已声明变量的正一倍或负一倍或转置或0矩阵表示。
        (each entry of X is specified independently as either 0, xn, or –xn where xn denotes the n-th decision variable in the problem.)
      例子说明:
           X3 = lmivar(1,[5 1;1 0;2 0]);  % Type 1
         
lmivar() 函数说明: 
   第一个参数表示矩阵的类型,可以是1,2,3  
        1:对称块对角结构    
X = lmivar(1,[6 1]);
S = lmivar(1,[2 0;2 1]);
上面的函数定义了两个矩阵型LMI矩阵变量 X 和 S

Matlab中使用LMI toolboxLMI相关推荐

  1. matlab中decnbr,LMI 求解时调用decnbr()函数得到的决策变量的个数为小数是为什么

    调用LMI工具箱feasp解释器的时候报错(如下图): 我看了feasp.m的代码后发现是sizex=decnbr(lmisys)这句得到的决策变量个数是个小数(78.8),实在不能理解请各位大佬解惑 ...

  2. tm matlab,[转载]关于matlab中textread

    今天打算跑下程序,突然发现,真的很烂,不会读入数据,简单的Iris.txt一上午都没读进去,在此对matlab中的textread函数做下总结,textscan函数待续. 笔者在此基础上进行运行,修改 ...

  3. matlab中normfit,MATLAB中如何得到一组统计数据的分布特征

    MATLAB中如何得到一组统计数据的分布特征 我想通过MATLAB知道一组统计数据的分布特征,如属于哪种分布,均值方差等,请问如何实现?谢谢! function f=p_judge(A,alpha) ...

  4. Matlab中bwmorph函数的使用

    Matlab中bwmorph函数的使用 Matlab中提供了一个基于形态学的处理函数,即以膨胀.腐蚀等操作为基础,其语法格式如下: bw2=bwmorph(bw1,operation,n); 其中bw ...

  5. Matlab中的lsqcurvefit函数的使用

    Matlab中的lsqcurvefit函数的使用 lsqcurvefit函数 调用示例 lsqcurvefit函数 非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数 ...

  6. matlab中调用java代码_Matlab中调用第三方Java代码

    在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...

  7. OpenCV中与matlab中相对应的函数

    1.matlab中的imread相当于OpenCV中的cvLoadImage(imageName,  CV_LOAD_IAMGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR): ...

  8. matlab中用于小数取整的函数的用法

    matlab中小数取整的函数大约有四个:floor.ceil.round.fix 若 A = [-2.0, -1.9, -1.55, -1.45, -1.1, 1.0, 1.1, 1.45, 1.55 ...

  9. matlab中help所有函数功能的英文翻译

    doc funname 在帮助浏览器中打开帮助文档 help funname 在命令窗口打开帮助文档 helpbrowser 直接打开帮助浏览器 lookfor funname 搜索某个关键字相关函数 ...

最新文章

  1. 中国民航大学计算机学院宿舍,中国民航大学计算机科学与技术学院研究生导师简介-谢丽霞_清华大学宿舍...
  2. C#3.0 为我们带来什么(5) —— 匿名类型
  3. 永信至诚CTO张凯:CloudStack+Docker构建云端信息安全实验场
  4. 浅谈分布式一致性协议之2PC
  5. iOS如何退出测试软件,如何继续测试iOS应用程序,使用UIAutomation仪器,甚至应用程序退出后?(How to c...
  6. 解封装(八):av_seek_frame改变播放进度函数
  7. 考研分享:三战南大,考研的路上你从不孤独(内附500G最新考研资料分享)
  8. 如何以出售开源软件为生?
  9. spark yarn 提交作业
  10. gpu opencl 向量加_【Embedding】GloVe:大规模语料中快速训练词向量
  11. qq音乐android升级版,QQ音乐Android 4.8更新 温暖私享正版无损好音乐
  12. Sql Server 2008R2 备份文件还原数据库
  13. 微信小程序地图添加标记点
  14. Vue+ElementUI实现简单的用户管理系统(四):查看用户详情页及删除用户
  15. qt远程调试ARM板
  16. 支持自动识别快递公司批量查询物流、一键导出
  17. php用户登录界面代码有背景,大男孩教你怎么自定义WordPress用户登录界面背景图片? – 男孩资源网...
  18. 89 个操作系统核心概念
  19. Python 多线程 threading.Thread 同时最多有 n 个线程
  20. layert弹出层关于layer.open,打开页面时的用法

热门文章

  1. 能看html5全景图的vr头盔,用Vray渲染器怎么做全景图啊,可以给VR看的那?。
  2. 面朝大海,春不暖花不见
  3. EDGECAM助力Tridan的5轴加工工艺
  4. 如何将个人实名认证变更为企业实名认证?
  5. Android 自定义控件-Canvas和Paint绘图详解-手把手带你绘制一个时钟.
  6. Cursor:GPT-4 驱动的强大代码编辑器
  7. 扎心,奉劝各位开发人员的几句真话
  8. rsync下行同步+inotify实时同步部署
  9. 解决帝国时代 之 罗马复兴 不能加入游戏的问题
  10. 拿到企鹅offer的学弟来报喜了!