1 问题描述

【MATLAB】求解线性矩阵不等式_fesap求解器

2 控制器设计

【MATLAB】求解线性矩阵不等式_线性矩阵不等式求解_02

【MATLAB】求解线性矩阵不等式_fesap求解器_03

【MATLAB】求解线性矩阵不等式_线性矩阵不等式求解_04

3 仿真算例

【MATLAB】求解线性矩阵不等式_线性矩阵不等式求解_05

4 计算程序

function [ X, Y, epsilon, delta, eta] = LMI_Calculate()
%{
1、线性矩阵不等式的求解
2、连续时间线性系统的事件触发机制, 韩俊先. 东北大学硕士毕业论文

%}
%% 变量初始化
clear,clc
setlmis([]); %初始化LMI系统
n=2;
m=1;% 确定矩阵维数
%常数声明
A=[0, 1; 2, -3];
B1=[0.5; 0.8];
B2=[1; 1];
C=[0, 0.1; 0.1, 0];
D=[0.1; 0.2];
G=[0.2, 0; 0.1, 0];
E=[0.2, 0; 1, 0];
lambda=0.2;
gamma=0.4;

%% 矩阵声明
X=lmivar(1,[n, 1]) ; %2阶对称矩阵满块
Y=lmivar(2,[m, n]); % m*n的矩阵
epsilon=lmivar(1,[1, 1]) ; %表示一个标量
delta=lmivar(1,[1, 1]) ; %表示一个标量
eta=lmivar(1,[1, 1]) ; %表示一个标量

%% 描述线性矩阵不等式
%第一组:标量为正
lmiterm([-1, 1, 1, epsilon], 1, 1); %epsilon>0

%第二组:标量为正
lmiterm([-2, 1, 1, delta], 1, 1); %delta>0

%第三组:标量为正
lmiterm([-3, 1, 1, eta], 1, 1); %eta>0

%第四组 eta*I<=X
lmiterm([-4, 1,1, X], 1, 1);
lmiterm([4, 1,1, eta], 1, 1);

%第五组:大的矩阵不等式
% N=X*A'+A*X+Y'*B2'+B2*Y+epsilon*(G*G')+lambda*X;
% lmiterm([5, 1, 1, 0], N); %该写法错误

%% 以下正确写法
lmiterm([5, 1, 1, X], 1, A', 's');
lmiterm([5, 1, 1, Y], B2, 1, 's');
lmiterm([5, 1, 1, epsilon], G, G');
lmiterm([5, 1, 1, X], lambda, 1);
%%
lmiterm([5, 1, 2, Y], B2, 1);
lmiterm([5, 1, 3, 0], B1);
lmiterm([5, 1, 3, X], C', D);
lmiterm([5, 1, 4, X], 1, C');
lmiterm([5, 1, 5, X], 1, 1);
lmiterm([5, 1, 6, X], 1, E');
lmiterm([5, 2, 2, delta], -1, 1); %-delta*I
lmiterm([5, 3, 3, 0], -gamma^2);
lmiterm([5, 3, 3, 0], D'*D); %该行程序原文中错写为D*D'
lmiterm([5, 4, 4, 0], -1);
lmiterm([5, 5, 5, 0], -1);
lmiterm([5, 6, 6, epsilon], -1, 1);

%% 第六组:对称矩阵X>0,这儿文中没有要求
% lmiterm([-6,1,1, X],1,1); %没有要求X为正定矩阵

lmisys=getlmis; %求解结束

%% 求解可行解X,Y
[tmin, xfeas]=feasp(lmisys);
if(tmin<0)
disp('Feasible');
else
return
disp('No Feasible');
end

%%求解参数
X=dec2mat(lmisys, xfeas, X)
Y=dec2mat(lmisys, xfeas, Y)
epsilon=dec2mat(lmisys, xfeas, epsilon)
delta=dec2mat(lmisys, xfeas, delta)
eta=dec2mat(lmisys, xfeas, eta)

%%求解控制器增益
K=Y*inv(X)
end

5 程序计算结果

Solver for LMI feasibility problems L(x) < R(x)
This solver minimizes t subject to L(x) < R(x) + t*I
The best value of t should be negative for feasibility

Iteration : Best value of t so far

1 0.635835
2 0.421111
3 0.235576
4 0.056788
5 -0.049501

Result: best value of t: -0.049501
f-radius saturation: 0.000% of R = 1.00e+09

Feasible

X =

3.7669 0.1223
0.1223 5.0548


Y =

-20.7679 -10.8085


epsilon =

57.4172


delta =

54.8695


eta =

1.5342


K =

-5.4481 -2.0065

6 原文结果

【MATLAB】求解线性矩阵不等式_线性矩阵不等式求解_06

文 献

[1]韩俊先. 连续时间线性系统的事件触发控制[D].东北大学,2014.

_____________END______________