利用Matlab中LMI工具箱实现线性矩阵不等式求解

本文以《Robust output feedback fault-tolerant control of non-linear multi-agent systems based on wavelet neural networks》中部分参数矩阵求解为例。


求解参数矩阵F2,P1的线性矩阵不等式.png
%该文件是求解P1,F2的程序
A = [0 1 0 0;-48.6 -1.25 48.6 0;0 0 0 10;1.95 0 -1.95 0];%矩阵A初始化
F1 = [1.8275 0.9931;0.9931 13.7082;1.8124 2.8758;0.1553 0.5663];%这里的F1直接用的作者给出的
p=1;%小波网络输出层个数
n=4;%状态维度
Ip = eye(p);%见(63)第一项
In = eye(n);%见(63)最后一项
C = [1 0 0 0;0 1 0 0];%C初始化
E = [0 12.5 0 0]';%E初始化
epsilon = 1;%epsilon初始化
lg=0.333;%lg给出
M=A-F1*C; %用M简化表达
setlmis([]);%LMI系统%设置四个变量N1和N2
N1= lmivar(1,[p,1]);%为了方便用gevp形式求解P1,F2,用变量N1代替(63)式中左边的第一项,增加两个条件:N1<ξIp,N2<ξIn
N2= lmivar(1,[n,1]);%为了方便用gevp形式求解P1,F2,用变量N2代替(63)式中左边的最后一项

%第一种方式求解
%求P1
P1= lmivar(1,[4,1]);%定义变量P1
F2= lmivar(2,[1,2]);%定义变量F2

%第一个式子对应式62
lmiterm([1 1 1 P1],1,M,'s');%式62中左边第一项前半部分(A ? F1C)'P1 + P1(A ? F1C)
lmiterm([1 1 1 0],epsilon*In);%式62中左边第一项后半部分εIn
lmiterm([1 1 2 P1],1,1);%式62中左边第二项前,P1
lmiterm([1 2 2 0],-1/(1+lg*lg/epsilon));%式62中最后一项

%第二个式子对应P1>0
lmiterm([-2 1 1 P1],1,1);%第二个式子

%第三个式子对应式63
lmiterm([-3 1 1 N1],1,1);
lmiterm([-3 1 2 P1],E',1);
lmiterm([-3 1 2 F2],-1,C);
lmiterm([-3 2 2 N2],1,1);

%第四个式子对应N1<ξIp
lmiterm([4 1 1 N1],1,1);
lmiterm([-4 1 1 1],1,Ip);

%第五个式子对应N2<ξIn
lmiterm([5 1 1 N2],1,1);
lmiterm([-5 1 1 1],1,In);

lmisys = getlmis; %这都是范式了,获取上边描述的LMI系统
[lambda,decvars] = gevp(lmisys,2); %验证 LMI 的可行性
P1=dec2mat(lmisys,decvars,P1)%求解P1
F2=dec2mat(lmisys,decvars,F2)%求解F2
%N1=dec2mat(lmisys,decvars,N1)%求解N1
%N2=dec2mat(lmisys,decvars,N2)%求解N2
求解参数矩阵P1,Tao的线性矩阵不等式.png
%该文件是求解P2及tao的程序,可以将tao作为变量和P2一起进行求解,也可以提前预设tao值进行P2求解
%--------------------------------------------------------------------------
%1.tao作为变量进行求解
setlmis([]); %LMI系统%设置两个变量tao和P2
A = [0 1 0 0;-48.6 -1.25 48.6 0;0 0 0 10;1.95 0 -1.95 0];
B = [0 21.6 0 0]';
lg=0.333;
I=eye(4);
%--------------------------------------------------------------------------
tao = lmivar(1,[1,0]); %变量设置lmivar(type,struct),type:1代表块对角化对称矩阵,struct[1,0]中:1代表矩阵的维数为1,0代表标量,其他值参考下图说明,-1为零矩阵,1为满矩阵
P2 = lmivar(1,[4,1]); %P2就是一个块对角化对称矩阵,是一个4维矩阵,且是对称满矩阵(1)%线性不等式描述
lmiterm([1 1 1 P2],1,A,'s');
lmiterm([1 1 1 0],lg^2*I);%第1个约束关系(且是小于等于号),第1行第1列中lg^2I_n没有变量,且是一个标量,所以为0,系数则是lg^2
lmiterm([1 1 1 tao],-1,B*B');%第1个约束关系,第1行第1列中变量tao,该变量的前后系数分别为-1,B*B^T,当然也可以写成1,-B*B^T

lmiterm([1 1 2 P2],1,1);%第1个约束关系,第1行第2列中%只需要描述矩阵右上角或者左下角的项
lmiterm([1 2 2 0],-I);%第1个约束关系,第2行第2列中
lmiterm([-2 1 1 P2],1,1); %第2个约束关系,P2>0,因为此处是大于号,所以取-2,且P2的前后系数都为1
lmiterm([-3 1 1 tao],1,1);%第3个约束关系,tao>0
lmisys = getlmis; %这都是范式了,获取上边描述的LMI系统
[tmin,xfeas] = feasp(lmisys); %验证 LMI 的可行性
P2=dec2mat(lmisys,xfeas,P2) %求解P2
tao=dec2mat(lmisys,xfeas,tao)%求解tao
%--------------------------------------------------------------------------

%2.预设tao=0.01进行求解
setlmis([]); %LMI系统%设置两个变量tao和P2
A = [0 1 0 0;-48.6 -1.25 48.6 0;0 0 0 10;1.95 0 -1.95 0];
B = [0 21.6 0 0]';
lg=0.333;
I=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];
tao=0.01;
%--------------------------------------------------------------------------
P2 = lmivar(1,[4,1]); %P2就是一个块对角化对称矩阵,是一个4维矩阵,且是对称满矩阵(1)%线性不等式描述
lmiterm([1 1 1 P2],1,A,'s');
lmiterm([1 1 1 0],lg^2*I);%第1个约束关系(且是小于等于号),第1行第1列中lg^2I_n没有变量,且是一个标量,所以为0,系数则是lg^2
lmiterm([1 1 1 0],-tao*B*B');%第1个约束关系,可以写成-tao*B*B^T
lmiterm([1 1 2 P2],1,1);%第1个约束关系,第1行第2列中%只需要描述矩阵右上角或者左下角的项
lmiterm([1 2 2 0],-I);%第1个约束关系,第2行第2列中

lmiterm([-2 1 1 P2],1,1); %第2个约束关系,P2>0,因为此处是大于号,所以取-2,且P2的前后系数都为1
lmisys = getlmis; %这都是范式了,获取上边描述的LMI系统
[tmin,xfeas] = feasp(lmisys); %验证 LMI 的可行性
P2=dec2mat(lmisys,xfeas,P2) %求解P2

参考链接:
1.https://blog.csdn.net/yin_bu_feng/article/details/79080040
2.https://wenku.baidu.com/view/552a888271fe910ef12df846.html
3.https://wenku.baidu.com/view/9e1e5dfd915f804d2a16c1b4.html

你可能感兴趣的:(利用Matlab中LMI工具箱实现线性矩阵不等式求解)