前几天我们的控制理论实习结束了,这次实习学到了一点东西,想把它写出来和大家分享一下,如有不足,也请大家批评指正。
首先,我们先来介绍LMI工具箱的一种很实用的用法:通过求解线性不等矩阵方程,根据正定的实对称矩阵P是否有解来判断系统是否稳定.下面我们将通过一个例子来为大家介绍它的第一个用法:
已知A=[1 1.4 2.5;-1.5 -3.6 -3.8;0 -0.7 -2.3],通过LMI判断系统的稳定性。
我们知道Lyapunov方程的基本形式为(Q为任意给定的实对称矩阵):
所以我们可建立一个线性矩阵不等式
然后就可以利用LMI工具箱进行求解。程序如下:
%常数
A=[11.4 2.5;-1.5 -3.6 -3.8;0 -0.7 -2.3];
%初始化LMI
setlmis([]);
%定义变量
p=lmivar(1,[3,0]);
%添加项
lmiterm([1,1,1,p],1,A,'s');
lmiterm([41 1 0],1);
%获取LMI系统描述
lmisys=getlmis;
[tmin,xfeas]=feasp(lmisys)
这里的lmivar是一个比较特殊的函数,它的用法如下:
P=lmivar(type,struct),其中type确定变量的类型,struct确定变量的内容。
当type=1时,变量P为块对角化对称矩阵,对角线上的每一个对角块均为方阵;
当type=2时,变量P为是一个 m×n 的长方形矩阵;
当type=3时,比较复杂,这里不做讨论。
lmiterm的用法如下:
lmiterm(termID,A,B,flag),其中termID里面形式为[a,b,c,P],a可取数字1,2,3...表示序号,代表LMI的第几个式子,P代表变量,b,c代表变量P在这个式子中的位置;A,B表示变量P左右两边相乘的数或者矩阵;flag只能为‘s’,代表对称。举个例子如下:
这个例子也是我们下一篇文章要写的内容,我们先讲如何构造其中的一小部分:
这里P,Q1,Q2为二阶对称正定矩阵,W1,M为二阶普通矩阵,所以,我们可以先定义这五个矩阵的形式:
P为对称正定矩阵,可以根据上面的方法写为:P=lmivar(1,[2,1]),Q1,Q2同理;
M为二阶普通矩阵,则比较简单:M=lmivar(2,[2,2]),W1同理。
定义完之后,接着就来表述A11的内容,首先是-2P,因为是第一个式子里面的第一行第一列,所以它的termID=[1 1 1 P],又因为变量P左乘-2,右乘1,所以a=-2,b=1,因为这里没有对称的情况,所以不用写‘s'。完整的结果为:lmiterm([1 1 1 P],-2,1);对于Q1,Q2,它们只是左右乘的数与P不一样,将a,b的值修改一下即可:lmiterm([1 1 1 Q1],1,1),lmiterm([1 1 1 Q2],1,1)
接着是W1,它也是第一个式子里面的第一行第一列,所以它的termID=[1 1 1 W1],又因为左右都乘以1,所以a,b均为1,但是这里的flag可以用上了,因为这里有W1的转置矩阵,所以最终的形式为:lmiterm([1 1 1 W1],1,1,'s'),M的形式与W1完全一致,为:lmiterm([1 1 1 M],1,1,'s')。
再接着回到第一个例题,写完所有的式子之后,运行程序,根据返回输出的值tmin判断不等矩阵是否有解,这道题的结果为:
tmin>0,,表明 LMI 系统是不可行的,P无解,所以系统不稳定。当然,如果tmin<0的话,就可以接着调用dec2mat函数求解出P矩阵,这个也是下一篇文章要介绍到的内容。
第一次写这样的博文,难免格式上有些不太好看,请大家谅解啊,以后会慢慢进步的。
完成于2018年1月17日0时2分