如上图所示,这是我看的论文《Secure Leader–Follower Formation Control of Networked Mobile Robots Under Replay Attacks》里的线性矩阵不等式公式(18),我采用MATLAB自带的求解器,并设计了代码求解,但是得到结果往往是
Result: best value of t: 9.282613e-12
f-radius saturation: 0.000% of R = 1.00e+09
Marginal infeasibility: these LMI constraints may be feasible but are not strictly feasible(边际不可行性:这些LMI约束可能可行,但并非严格可行)
我尝试过很多办法,都不能解决这个问题,希望大神可以来救救我!!!
如下,是我的代码:
%% 参数初始化
beta= 2; %自己设置
% 1 7.841004e-13 5.882038e-12
% 10 1.981678e-11 8.150654e-12
% 100 1.507456e-11 3.267017e-11
% 1000 2.543475e-12
% 1e+4 1.167782e-11
% 1e+5 1.688853e-13 1.432912e-12
delta_ba = 0; % 0——20
fai = 0.01;
gamma_ba = 0.38;
tau1_der = 0.02;
tau2_der= delta_ba +fai +tau1_der;
I = [1 0 ;
0 1];
% K1 = diag([0.8,0.8]);
% mu1 = 10;
% mu2 = 10;
%% 描述矩阵不等式
%初始化
setlmis([]);
%矩阵变量定义
n=2; % 矩阵维度
m = 1;
W1=lmivar(1,[n,m]); Q1=lmivar(1,[n,m]); Q2=lmivar(1,[n,m]); U1=lmivar(1,[n,m]); U2=lmivar(1,[n,m]);
K1 = lmivar(1,[n,0]);
%不等式
%11
lmiterm([1,1,1,Q1],1,1); lmiterm([1,1,1,Q2],1,1); lmiterm([1,1,1,U1],-4,1); lmiterm([1,1,1,U2],-4,1); % 8.397113e-13
% 14
lmiterm([1,1,4,U1],-2,1); %6.705406e-12
% 15
lmiterm([1,1,5,U2],-2,1); %9.450340e-12
% 16
lmiterm([1,1,6,U1],6,1); % 4.170123e-12
% 17
lmiterm([1,1,7,U2],6,1);%4.209931e-12
% 18
lmiterm([1,1,8,W1],1,1);% 3.868988e-14 作用是坏的
% 22
lmiterm([1,2,2,K1],-2*(1-gamma_ba)^2,1); %注释之后,0.032605 数值变大了,说明好的作用消失了,这一项是好的
% 23
lmiterm([1,2,3,K1],-2*(gamma_ba-gamma_ba^2),1); %注释之后,0.032658 好的作用比较大
% % 26
% lmiterm([1,2,6,U1],6,1);
% % 27
% lmiterm([1,2,7,U2],6,1);
% 28
lmiterm([1,2,8,0],-(1-gamma_ba)); lmiterm([1,2,8,K1],-(1-gamma_ba)*beta,1); %注释之后 0.010485
% 33
lmiterm([1,3,3,K1],-2*gamma_ba^2,1);%注释之后 0.02275
% 38
lmiterm([1,3,8,0],-gamma_ba); lmiterm([1,3,8,K1],-gamma_ba*beta,1);%注释之后 0.02584
% 44
lmiterm([1,4,4,Q1],-1,1); lmiterm([1,4,4,U1],-4,1); % 原本 3.406239e-12。,注释后1.319336e-11
% 46 新增
lmiterm([1,4,6,U1],6,1);%5.645714e-12
% 57 新增
lmiterm([1,5,7,U2],6,1);%8.672395e-12
% 55
lmiterm([1,5,5,Q2],-1,1); lmiterm([1,5,5,U2],-4,1);%1.584701e-12
% 66
lmiterm([1,6,6,U1],-12,1);%3.252866e-12
%77
lmiterm([1,7,7,U2],-12,1);%2.654539e-12
% 88
lmiterm([1,8,8,U1],tau1_der^2,1); lmiterm([1,8,8,U2],tau2_der^2,1); lmiterm([1,8,8,0],-2*beta*I);
% lmiterm([1,8,8,U1],tau1_der,1); lmiterm([1,8,8,U2],tau2_der,1); lmiterm([1,8,8,0],-2*beta*I);
%注释后无法区分可行
%% 约定正定矩阵
lmiterm([-2,1,1,W1],1,1);
lmiterm([-3,1,1,Q1],1,1);
lmiterm([-4,1,1,Q2],1,1);
lmiterm([-5,1,1,U1],1,1);
lmiterm([-6,1,1,U2],1,1);
lmiterm([-7,1,1,K1],1,1);
% epsilon = 1;%1e-1; % 松弛值
% lmiterm([-2,1,1,W1],1,1);
% lmiterm([-2,1,1,0],epsilon); % 添加松弛
% lmiterm([-3,1,1,Q1],1,1);
% lmiterm([-3,1,1,0],epsilon);
% lmiterm([-4,1,1,Q2],1,1);
% lmiterm([-4,1,1,0],epsilon);
% lmiterm([-5,1,1,U1],1,1);
% lmiterm([-5,1,1,0],epsilon);
% lmiterm([-6,1,1,U2],1,1);
% lmiterm([-6,1,1,0],epsilon);
% lmiterm([-7,1,1,K1],1,1);
% lmiterm([-7,1,1,0],epsilon);
% 结尾
lmisys = getlmis; %获取lmi信息
%% 求解LMI
options = [100, 55000, 1e+30, 100, 0]; % -1 == 1e+10
[tmin,xfeas]=feasp(lmisys,options); %求出可行解
% [tmin,xfeas]=feasp(lmisys); %求出可行解
if (tmin<0)
disp('Feasible');
W1= dec2mat(lmisys,xfeas,W1);
Q1= dec2mat(lmisys,xfeas,Q1);
Q2= dec2mat(lmisys,xfeas,Q2);
U1= dec2mat(lmisys,xfeas,U1);
U2= dec2mat(lmisys,xfeas,U2);
K1= dec2mat(lmisys,xfeas,K1);
else
W1=nan;
Q1=nan;
Q2=nan;
U1=nan;
U2=nan;
K1= nan;
end